选h2因其java原生实现、无native依赖、启动快、内存占用低,适合测试与轻量应用;sqlite需jni,derby对jdk版本敏感;h2默认不兼容mysql语法,需mode参数启用兼容模式。
为什么选 H2 而不是 SQLite 或 Derby
H2 是 Java 原生实现的嵌入式数据库,不需要额外 native 依赖,启动快、内存占用低,适合单元测试、原型开发和轻量级桌面应用。H2 的 JDBC URL 格式统一(jdbc:h2:mem:、jdbc:h2:file:),驱动类名固定为 org.h2.Driver,不像 SQLite 需要 JNI 库,也不像 Derby 对 JDK 版本敏感。
常见误区是直接把 H2 当成 MySQL 用——它默认不兼容 MySQL 语法,比如 INSERT IGNORE、ON DUPLICATE KEY UPDATE 都不支持,除非显式启用兼容模式。
如何配置内存模式与文件模式的连接 URL
内存模式适合测试,进程退出即丢数据;文件模式持久化,但要注意路径权限和相对路径解析逻辑(H2 默认以 JVM 启动目录为基准)。
-
jdbc:h2:mem:testdb—— 纯内存,每次新建连接都是新库,需加;DB_CLOSE_DELAY=-1才能让多个连接共享同一内存实例 -
jdbc:h2:file:./data/sample—— 写入当前目录下的sample.mv.db文件,推荐加;AUTO_SERVER=TRUE支持多进程访问(避免Database may be already in use错误) -
jdbc:h2:~/test—— 使用用户主目录,路径更稳定,适合桌面应用
注意:URL 中不能漏掉冒号,jdbc:h2:mem 会报 File not found;文件模式首次连接会自动建库,但目录必须存在,否则抛 java.io.IOException: Directory doesn't exist。
立即学习“Java免费学习笔记(深入)”;