H2是Java嵌入式测试首选,因其纯Java实现、无native依赖、启动快、内存占用低;支持内存模式(jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1)和文件模式(jdbc:h2:file:./data/testdb),自动建库建表,配合Web控制台(Server.createWebServer)可直观调试。

Java 中用 JDBC 在嵌入式数据库做本地测试,核心是选对轻量级数据库(如 H2 或 Derby),不依赖外部服务,直接通过 JDBC URL 加载驱动、创建连接、自动建库建表,全程在 JVM 内完成。关键不是“连服务器”,而是让数据库文件或内存实例随应用一起启停。
选一个嵌入式数据库并引入驱动
H2 最常用:只有一个 h2-x.x.x.jar,Maven 坐标:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.2.224</version>
</dependency>
Derby 也可选,但 H2 启动更简单、控制台更友好。jar 包加进 classpath 后,org.h2.Driver 就能被自动识别(JDBC 4.0+ 不强制 require Class.forName)。
立即学习“Java免费学习笔记(深入)”;
用文件模式连接,自动创建数据库和表
URL 示例:jdbc:h2:file:./data/testdb(路径可相对或绝对)
- 如果
testdb.mv.db文件不存在,H2 会自动创建 - 用户名密码首次连接时设定,比如
"sa"和空密码,后续连接需保持一致 - 无需提前启动服务——连接即启动,断开即释放(单线程默认模式)
代码片段示例:
Connection conn = DriverManager.getConnection("jdbc:h2:file:./data/testdb", "sa", "");
Statement stmt = conn.createStatement();
stmt.execute("CREATE TABLE IF NOT EXISTS user(id INT PRIMARY KEY, name VARCHAR(32))");
stmt.execute("INSERT INTO user VALUES (1, '张三')");
加个内存模式快速验证逻辑
临时测试不用落盘?换用内存模式:
jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
-
mem:表示纯内存运行,进程结束数据即丢 -
DB_CLOSE_DELAY=-1防止连接关闭后数据库被自动销毁,方便多语句操作 - 适合单元测试,配合 JUnit 的
@Before初始化表结构非常干净
顺便打开 Web 控制台看数据
H2 自带控制台,几行代码就能启用:
Server.createWebServer("-web", "-webAllowOthers", "-webPort", "8082").start();
- 启动后访问 http://localhost:8082
- JDBC URL 填
jdbc:h2:file:./data/testdb,用户填 sa,密码留空即可登录 - 可直观查表、执行 SQL、导出数据,比写 select 打印日志高效得多


















