Spring 嵌入式内存数据库选型:H2、Derby 与 HSQL 对比
背景
小组希望有独立的单测数据库以保证数据稳定性。由于项目基于 Spring,优先选择 Spring 自带的三种嵌入式数据库进行尝试。
内存数据库问题汇总
Derby
- 数据类型支持有限:仅支持 int、smallint、bigint 等基础类型。
- 保留关键字限制:如
Hour等不能使用,但可通过加引号解决。 - 语法兼容性:
LIMIT和OFFSET语法与 MySQL 不一致。
HSQL
- 语法支持不足:对
LIMIT和OFFSET的支持不够完善。 - 保留关键字限制:例如
COUNT等关键字不可用,需查阅具体保留字列表规避。
H2
H2 在语法支持及数据类型方面与 MySQL 的兼容性最高,基本无兼容性问题。
唯一注意点:默认返回字段名大写。通过配置可解决。
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" />

