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>时也要使用和第一次相同的用户名密码。(用户名密码都可以为空)


发现错误或想为文章做出贡献? 在 GitHub 上编辑此页面!
© 2020-2025 All Right Reserved 滇ICP备17005647号-2