大佬教程收集整理的这篇文章主要介绍了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,需要第一个设置。
以上是大佬教程为你收集整理的Spring boot and SQLite全部内容,希望文章能够帮你解决Spring boot and SQLite所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。