1. 概述

内存数据库将数据存储在系统内存而非磁盘上,因此访问速度远超传统磁盘数据库。⚠️ 但这类数据库仅适用于不需要持久化存储的场景,例如:

  • 单元测试加速
  • 临时数据处理
  • 原型验证

内存数据库通常作为嵌入式数据库运行:进程启动时创建,进程结束时销毁。这种特性让测试环境搭建变得异常简单——无需配置外部数据库服务。

接下来我们将深入探讨 Java 生态中最主流的几款内存数据库及其配置方案。

2. H2 数据库

H2 是纯 Java 编写的开源数据库,支持标准 SQL 和嵌入式/独立模式。其核心优势:

  • ✅ 极速性能
  • ✅ 轻量级(JAR 仅 1.5MB)
  • ✅ 兼容主流 SQL 标准

2.1 Maven 依赖

在项目中添加以下依赖即可集成 H2:

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>2.1.214</version>
</dependency>

最新版本可在 Maven Central 获取

2.2 配置方案

通过以下连接字符串创建内存数据库:

driverClassName=org.h2.Driver
url=jdbc:h2:mem:myDb;DB_CLOSE_DELAY=-1
username=sa
password=sa

⚠️ 踩坑提示:默认情况下,当最后一个连接关闭时数据库会自动销毁。添加 DB_CLOSE_DELAY=-1 参数可使数据库在 JVM 生命周期内持续存在。

若配合 Hibernate 使用,需指定方言:

hibernate.dialect=org.hibernate.dialect.H2Dialect

详细文档请参考 h2database.com

3. HSQLDB(HyperSQL 数据库)

HSQLDB 是另一款 Java 编写的开源关系型数据库,完全兼容 SQL/JDBC 标准,支持存储过程和触发器等高级特性。

3.1 Maven 依赖

<dependency>
    <groupId>org.hsqldb</groupId>
    <artifactId>hsqldb</artifactId>
    <version>2.7.1</version>
</dependency>

最新版本见 Maven Central

3.2 配置方案

标准内存模式配置:

driverClassName=org.hsqldb.jdbc.JDBCDriver
url=jdbc:hsqldb:mem:myDb
username=sa
password=sa

Hibernate 方言配置:

hibernate.dialect=org.hibernate.dialect.HSQLDialect

附带图形化数据库管理工具,详情访问 hsqldb.org

4. Apache Derby 数据库

Apache Derby 是 Apache 基金会维护的纯 Java 关系型数据库,支持嵌入式和客户端-服务器两种模式。

4.1 Maven 依赖

<dependency>
    <groupId>org.apache.derby</groupId>
    <artifactId>derby</artifactId>
    <version>10.13.1.1</version>
</dependency>

最新版本在 Maven Central

4.2 配置方案

内存模式连接字符串:

driverClassName=org.apache.derby.jdbc.EmbeddedDriver
url=jdbc:derby:memory:myDb;create=true
username=sa
password=sa

⚠️ 关键参数create=true 确保数据库自动创建。默认情况下 JVM 退出时数据库会被销毁。

Hibernate 方言:

hibernate.dialect=org.hibernate.dialect.DerbyDialect

更多信息见 db.apache.org/derby

5. SQLite 数据库

SQLite 是 C 语言实现的轻量级嵌入式数据库,支持内存模式和文件存储模式。虽然非 Java 原生,但通过 JDBC 驱动可完美集成。

5.1 Maven 依赖

<dependency>
    <groupId>org.xerial</groupId>
    <artifactId>sqlite-jdbc</artifactId>
    <version>3.16.1</version>
</dependency>

依赖下载地址 Maven Central

5.2 配置方案

内存模式配置:

driverClassName=org.sqlite.JDBC
url=jdbc:sqlite:memory:myDb
username=sa
password=sa

当前限制:Hibernate 官方暂未提供 SQLite 方言。如需集成需自定义 HibernateDialect 实现类。

技术文档参考 sqlite.org

6. Spring Boot 中的内存数据库

Spring Boot 对 H2、HSQLDB 和 Derby 提供开箱即用的支持:

  1. pom.xml 添加任一数据库依赖
  2. Spring Boot 自动检测并完成配置
  3. 无需编写任何数据库连接代码

这种零配置方案特别适合:

  • 快速原型开发
  • 测试环境数据库模拟
  • 微服务临时数据存储

7. 总结

本文梳理了 Java 生态中主流内存数据库的核心特性:

数据库 语言 Hibernate 方言支持 特色功能
H2 Java ✅ 完整支持 轻量级、高性能
HSQLDB Java ✅ 完整支持 存储过程/触发器
Derby Java ✅ 完整支持 Apache 生态集成
SQLite C ❌ 需自定义 超轻量级、跨平台

⚠️ 重要提醒:虽然内存数据库能极大提升测试效率,但需注意其与生产环境数据库的功能差异(如事务隔离级别、SQL 语法支持等)。建议在关键业务测试中补充集成测试验证。


原始标题:List of In-Memory Databases | Baeldung