Sun*_*Wei 5 spring-mvc hsqldb mybatis
环境:Spring(3.2.3.RELEASE)+ MyBatis(3.2.2)+ HSQL(2.3.0)
<resultMap id="hashMapResult" type="java.util.HashMap">
<result property="key" column="key" />
<result property="value" column="value" />
</resultMap>
<select id="getSettings" resultMap="hashMapResult">
SELECT "KEY","VALUE" from "PUBLIC"."SETTINGS";
</select>
create table "SETTINGS" (
"KEY" varchar(255) not null,
"VALUE" varchar(512) not null,
CONSTRAINT SETTINGS_KEY_UNIQUE UNIQUE("KEY")
);
Run Code Online (Sandbox Code Playgroud)
URL:jdbc:hsqldb:mem:mydb; sql.syntax_mys = true; shutdown = true;
使用内存数据库时,出现以下错误:
Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: SETTINGS
at org.hsqldb.error.Error.error(Unknown Source) ~[hsqldb-2.3.0.jar:2.3.0]
at org.hsqldb.error.Error.error(Unknown Source) ~[hsqldb-2.3.0.jar:2.3.0]
at org.hsqldb.SchemaManager.getTable(Unknown Source) ~[hsqldb-2.3.0.jar:2.3.0]
at org.hsqldb.ParserDQL.readTableName(Unknown Source) ~[hsqldb-2.3.0.jar:2.3.0]
at org.hsqldb.ParserDQL.readTableOrSubquery(Unknown Source) ~[hsqldb-2.3.0.jar:2.3.0]
at org.hsqldb.ParserDQL.XreadTableReference(Unknown Source) ~[hsqldb-2.3.0.jar:2.3.0]
Run Code Online (Sandbox Code Playgroud)
但是当使用基于文件的数据库时jdbc:hsqldb:file:mydb; sql.syntax_mys = true; shutdown = true; 没有任何错误.
我使用Spring的EmbeddedDatabaseFactory来初始化数据库:
try {
EmbeddedDatabaseFactory dbFactory = new EmbeddedDatabaseFactory();
DatabaseConfig dbConfig = appConfig.getDbConfig();
ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
populator.setContinueOnError(false);
populator.setIgnoreFailedDrops(false);
DefaultResourceLoader resourceLoader = new DefaultResourceLoader();
populator.addScript(resourceLoader.getResource(dbConfig
.getSqlSchemeFile()));
populator.addScript(resourceLoader.getResource(dbConfig
.getSqlDataFile()));
dbFactory.setDatabasePopulator(populator);
dbFactory.setDatabaseName(dbConfig.getName());
dbFactory.setDatabaseConfigurer(new HSQLConfigurer(dbConfig));
return dbFactory.getDatabase();
} catch (Exception e) {
logger.error("dataSource error", e); //$NON-NLS-1$
return null;
}
Run Code Online (Sandbox Code Playgroud)
谁知道为什么?
在此上下文中不应使用shutdown = true.似乎连接已关闭且数据库已关闭,这意味着内存数据库不再存在.
您还应该避免使用VALUE作为列名.这是一个关键字.
| 归档时间: |
|
| 查看次数: |
14222 次 |
| 最近记录: |