程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Spring boot and SQLite大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Spring boot and sqlite?

开发过程中遇到Spring boot and sqlite的问题如何解决?下面主要结合日常开发的经验,给出你关于Spring boot and sqlite的解决方法建议,希望对你解决Spring boot and sqlite有所启发或帮助;

Spring Boot无法与sqlite开箱即用(例如,与H2,HSQL或Apache Derby兼容-我建议你使用其中的任何一种来代替sqlite)。

首先,你需要覆盖数据源以指定sqlite数据源。在你的配置中使用以下代码(使用DatasourceBuilder在Spring Boot 1.1.0.M2中引入的代码)

@Bean
public Datasource datasource() {
        DatasourceBuilder datasourceBuilder = DatasourceBuilder.create();
        datasourceBuilder.driverClassname("org.sqlite.JDBC");
        datasourceBuilder.url("jdbc:sqlite:your.db");
        return datasourceBuilder.build();   
}

然后你需要创建一个sqliteDialect,因为Hibernate还没有一个(但适用于Hibernate 4)

package your.package

import java.sql.Types;

import org.hibernate.dialect.Dialect;
import org.hibernate.dialect.function.StandardsqlFunction;
import org.hibernate.dialect.function.sqlFunctionTemplate;
import org.hibernate.dialect.function.VarargssqlFunction;
import org.hibernate.Hibernate;
import org.hibernate.type.StringType;

public class sqliteDialect extends Dialect {
    public sqliteDialect() {
        registercolumnType(Types.bIT, "Integer");
        registercolumnType(Types.Tinyint, "Tinyint");
        registercolumnType(Types.smaLliNT, "smallint");
        registercolumnType(Types.IntegeR, "Integer");
        registercolumnType(Types.bIGINT, "bigint");
        registercolumnType(Types.float, "float");
        registercolumnType(Types.REAL, "real");
        registercolumnType(Types.DOUBLE, "double");
        registercolumnType(Types.NUMERIC, "numeric");
        registercolumnType(Types.decimaL, "decimal");
        registercolumnType(Types.CHAR, "char");
        registercolumnType(Types.VARCHAR, "varchar");
        registercolumnType(Types.LONGVARCHAR, "longvarchar");
        registercolumnType(Types.DATE, "date");
        registercolumnType(Types.TIME, "time");
        registercolumnType(Types.timestAMP, "timestamp");
        registercolumnType(Types.bINARY, "blob");
        registercolumnType(Types.VARBINARY, "blob");
        registercolumnType(Types.LONGVARBINARY, "blob");
        // registercolumnType(Types.NulL, "null");
        registercolumnType(Types.bLOB, "blob");
        registercolumnType(Types.CLOB, "clob");
        registercolumnType(Types.BooleAN, "Integer");

        registerFunction( "concat", new VarargssqlFunction(StringType.INSTANCE, "", "||", "") );
        registerFunction( "mod", new sqlFunctionTemplate( StringType.INSTANCE, "?1 % ?2" ) );
        registerFunction( "substr", new StandardsqlFunction("substr", StringType.INSTANCE) );
        registerFunction( "subString", new StandardsqlFunction( "substr", StringType.INSTANCE) );
    }

    public Boolean supportsIDentitycolumns() {
        return true;
    }

  /*
  public Boolean supportsInsertSELEctIDentity() {
    return true; // As specify in NHibernate dialect
  }
  */

    public Boolean hasDataTypeInIDentitycolumn() {
        return false; // As specify in NHibernate dialect
    }

  /*
  public String appendIDentitySELEctToInsert(String insertString) {
    return new StringBuffer(insertString.length()+30). // As specify in NHibernate dialect
      append(insertString).
      append("; ").append(getIDentitySELEctString()).
      toString();
  }
  */

    public String getIDentitycolumnString() {
        // return "INTEGER PRIMary key autoincrement";
        return "Integer";
    }

    public String getIDentitySELEctString() {
        return "SELEct last_insert_rowID()";
    }

    public Boolean supportslimit() {
        return true;
    }

    protected String getlimitString(String query, Boolean hasOffset) {
        return new StringBuffer(query.length()+20).
                append(query).
                append(hasOffset ? " limit ? offset ?" : " limit ?").
                toString();
    }

    public Boolean supportstemporarytables() {
        return true;
    }

    public String getCreateTemporarytableString() {
        return "create temporary table if not exists";
    }

    public Boolean dropTemporarytableAfterUse() {
        return false;
    }

    public Boolean supportsCurrenttimestampSELEction() {
        return true;
    }

    public Boolean isCurrenttimestampSELEctStringCallable() {
        return false;
    }

    public String getCurrenttimestampSELEctString() {
        return "SELEct CURRENT_TIMESTAMP";
    }

    public Boolean supportsUnionAll() {
        return true;
    }

    public Boolean hasAltertable() {
        return false; // As specify in NHibernate dialect
    }

    public Boolean dropConsTraints() {
        return false;
    }

    public String getAddcolumnString() {
        return "add column";
    }

    public String getForupdateString() {
        return "";
    }

    public Boolean supportsOuterJoinForupdate() {
        return false;
    }

    public String getDropForeignKeyString() {
        throw new UnsupportedoperationException("No drop foreign key Syntax supported by sqliteDialect");
    }

    public String getAddForeignKeyConsTraintString(String consTraintname,
                                                   String[] ForeignKey, String referencedtable, String[] primaryKey,
                                                   Boolean referencesprimaryKey) {
        throw new UnsupportedoperationException("No add foreign key Syntax supported by sqliteDialect");
    }

    public String getAddprimaryKeyConsTraintString(String consTraintName) {
        throw new UnsupportedoperationException("No add priMary key Syntax supported by sqliteDialect");
    }

    public Boolean supportsIfExistsBeforetablename() {
        return true;
    }

    public Boolean supportsCascadedelete() {
        return false;
    }
}

最后application.propertIEs覆盖以下设置

spring.jpa.database-platform=your.package.sqliteDialect
spring.jpa.hibernate.ddl-auto=create-drop

为了让Spring Boot通知Hibernate它应该使用上面创建的sqliteDialect,需要第一个设置。

解决方法

我正在尝试将sqlite与Spring Boot应用程序一起使用。我知道Spring Boot对MongoDB的强大支持。但是我找不到一种将Spring Boot与sqlite结合使用的方法吗?任何建议从何处或如何开始使用Spring Boot和sqlite?

大佬总结

以上是大佬教程为你收集整理的Spring boot and SQLite全部内容,希望文章能够帮你解决Spring boot and SQLite所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:andboot