栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Spring boot and SQLite

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring boot and SQLite

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

首先,你需要覆盖数据源以指定SQLite数据源。在你的配置中使用以下代码(使用

DataSourceBuilder
在Spring Boot 1.1.0.M2中引入的代码)

@Beanpublic 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.packageimport 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 hasDataTypeInIdentityColumn() {        return false; // As specify in NHibernate dialect    }      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.SQLiteDialectspring.jpa.hibernate.ddl-auto=create-drop

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/395198.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号