H2 数据库
Laeni
2023-07-07
H2 数据库是一个用 Java 开发的数据库,它本身只是一个类库,可以直接嵌入到项目中。
H2的用途
- 最常使用的用途是单元测试。它启动速度快,而且可以关闭持久化功能(每一个用例执行完随即还原到初始状态);
- 可以同应用程序一起打包发布,用于存储少量的结构化数据;
- 可以作为缓存(作为缓存时一般使用内存模式),作为NoSQL的一个补充。当某些场景下数据模型必须为关系型,且需要缓存时它就可能会派上用场。
H2的存储模式
内存存储模式
内存存储模式是将数据存储与内存中,服务重启后数据丢失,一般用于缓存或者单元测试。
连接串
jdbc:h2:mem:<databaseName>
示例:jdbc:h2:mem:test1
- 内存存储模式只能本机使用,不能给其他程序远程连接。
- 内存存储模式会忽略用户名密码。
磁盘存储模式
磁盘存储模式就是将数据以文件方式存储在磁盘中(Docker 安装时默认存储在/h2-data
目录下,可以通过H2DATA
环境变量更改存储位置)。
连接串
jdbc:h2:[<server>][<path>]<databaseName>
-
server:
server
表示服务器连接地址,可以省略(省略时表示本机),如tcp://127.0.0.1:9092
。 -
path:
path
表示数据库文件存储的目录,一般用相对路径(如a/
、a/b/
)且可以省略(省略的情况也属于相对路径)。使用相对路径时会相对于H2DATA
环境变量指定的目录(默认为h2-data
);使用绝对路径(如/a/
、~/
)时会忽略H2DATA
环境变量,且当使用远程连接(server
不为空)时无法使用绝对路径。注意,当路径非空时一定要以
/
结尾。 -
databaseName:
databaseName
表示数据库名称,会在第一次连接上创建,同时也会在path
对应的目录生成相关文件(如<databaseName>.mv.db
、<databaseName>.trace.db
)。
当使用磁盘存储模式时,
<databaseName>
和用户名密码会使用第一次连接时传递的值,后续如果连接相同<databaseName>
时也要使用和第一次相同的用户名密码。(用户名密码都可以为空)