前一段时间接触了下spring支持的3种嵌入式数据库,希望能替代MySQL, 结果不太理想, 记录一下。
1. 使用背景:
小组希望有独立的单测数据库,这样能保证测试数据的稳定性。
本身项目用spring, 优先选择spring自带的3个嵌入式数据库。
2. 内存数据库的问题
Derby
1. 支持的datatype很少(int型的只有int, smallint, bitint),这个还可以接受
2. 有一些保留关键词(比如Hour等)不能使用, 但是通过加“”也可以解决
Derby的保留关键词请见: http://db.apache.org/derby/docs/10.11/ref/index.html
3. limit,offset与mysql语法不一致
HSQL
1. 语法问题
主要是对limit和offset的支持不够
2. 自有的关键词限制(这个也跳不过的)
比如count就不行,还有一些其它的keyword
keyword的保留字请见:http://www.hsqldb.org/doc/2.0/guide/lists-app.html#lta_disallowed_keywords
H2
H2对语法的支持以及数据类型之类的与MYSQL的兼容都是最高的,什么都OK
唯一的问题就是返回默认大写,这个搞了半天,终于搞定了。。spring配置如下
<bean id="my_datasource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="org.h2.Driver"/>
<property name="url" value="jdbc:h2:mem;DATABASE_TO_UPPER=FALSE" />
</bean>
<jdbc:initialize-database data-source="my_datasource">
<jdbc:script location="classpath:database-H2/olap.sql" />
<jdbc:script location="classpath:database-H2/olap_data.sql" />
</jdbc:initialize-database>