读书人

SQLite数据库 hibernate配备方言

发布时间: 2012-08-30 09:55:54 作者: rapoo

SQLite数据库 hibernate配置方言

配置hibernate时,设置数据的方言是很重要的,SQLite是一款内存式小数据库,在项目中很有用,数据查询和更新速度不错。但是,hibernate没有针对SQLite的方言。这就需要我们自己配置了。下面是SQLite数据库的方言类。

package xidian.sms.common;import java.sql.Types;import org.hibernate.Hibernate;import org.hibernate.dialect.Dialect;import org.hibernate.dialect.function.SQLFunctionTemplate;import org.hibernate.dialect.function.StandardSQLFunction;import org.hibernate.dialect.function.VarArgsSQLFunction;public class SQLiteDialect extends Dialect { public SQLiteDialect() {  super();  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.BLOB, "blob");  registerColumnType(Types.CLOB, "clob");  registerColumnType(Types.BOOLEAN, "integer");  registerFunction("concat", new VarArgsSQLFunction(Hibernate.STRING, "", "||", ""));  registerFunction("mod", new SQLFunctionTemplate(Hibernate.INTEGER, "?1 % ?2"));  registerFunction("substr", new StandardSQLFunction("substr", Hibernate.STRING));  registerFunction("substring", new StandardSQLFunction("substr", Hibernate.STRING)); } public boolean supportsIdentityColumns() {  return true; } public boolean hasDataTypeInIdentityColumn() {  return false; } public String getIdentityColumnString() {  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; } 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; }}
?

读书人网 >其他数据库

热点推荐