mat*_*sev 13 java spring h2 embedded-database
H2具有一系列兼容模式,适用于支持不同SQL方言的各种其他数据库,如MS SQL Server,MySQL,Oracle等.但是,在Spring中设置嵌入式数据库时,我找不到任何相应的设置.这是否意味着如果我在生产中使用Oracle而在测试期间使用H2,那么我必须使用没有任何方言特定功能的"普通"SQL?我忽略了什么吗?
sko*_*ong 15
哪个版本的H2数据库?根据文档,您可以通过SQL语句设置兼容模式(http://www.h2database.com/html/features.html#compatibility)
SET MODE PostgreSQL
Run Code Online (Sandbox Code Playgroud)
只需将此语句添加到Spring jdbc embedded-database加载的第一个sql脚本文件中
nde*_*rge 13
根据H2 doc,Oracle兼容模式非常有限.
例如,您不能使用PL/SQL过程.
如果使用Spring的EmbeddedDatabase,则不能按原样设置兼容模式; 你必须实现自己的EmbeddedDatabaseConfigurer并通过JDBC URL指定兼容模式(见下文).
但是,要使用与H2和Spring的兼容模式,您只需使用DataSource以经典方式在JDBC URL中设置模式(因此它不与Spring相关):
jdbc:h2:~/test;MODE=Oracle
Run Code Online (Sandbox Code Playgroud)
如果你使用Hibernate,你必须指定Oracle方言而不是H2方言.
您有 2 个选择:
Spring 代码生成 URL 如下:
String.format("jdbc:h2:mem:%s;DB_CLOSE_DELAY=-1", databaseName)
因此,在 setName() 中,您可以使用 URL 中的所有 H2 特定参数。
private DataSource dataSource() {
EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
EmbeddedDatabase db = builder
.setType(EmbeddedDatabaseType.H2)
.setName("testdb;DATABASE_TO_UPPER=false;MODE=Oracle")
.addScript("schema.sql")
.addScript("data.sql")
.build();
return db;
}
Run Code Online (Sandbox Code Playgroud)
直接配置数据库 URL,例如:
org.h2.jdbcx.JdbcDataSource 数据源 = 新的 org.h2.jdbcx.JdbcDataSource(); dataSource.setURL("jdbc:h2:testdb;MODE=MySQL;DATABASE_TO_UPPER=false;INIT=runscript from 'src/test/resources/schema.sql'\;runscript from 'src/test/resources/data.sql'" );
主要的不同在于 (2) 为每个数据库连接创建执行在 INIT 中定义的脚本,而不是每个数据库创建一次!这会导致各种问题,例如由于重复键等导致插入失败。
| 归档时间: |
|
| 查看次数: |
16037 次 |
| 最近记录: |