H2 数据库介绍(1)--简介
H2 是一个使用 Java 编写的数据库,支持内存、文件等数据存储模式,可用于测试及 Demo 应用;本文主要介绍其基本概念及安装。
1、H2 特点
- 速度很快、开源、JDBC API
- 嵌入式和服务器模式;基于磁盘或内存的数据库
- 事务支持,多版本并发
- 基于浏览器的控制台应用程序
- 加密数据库
- 全文搜索
- 纯 Java,并且体积小:约 2.5 MB 的 jar 文件
- ODBC 驱动程序
2、连接模式
H2 支持以下连接模式:
嵌入式模式(使用 JDBC 进行本地连接)
服务器模式(通过 TCP/IP 上的 JDBC 或 ODBC 进行远程连接)
混合模式(同时进行本地和远程连接)
2.1、嵌入式模式(Embedded Mode)
在嵌入式模式中,应用程序使用 JDBC 从同一个 JVM 中打开数据库。这是最快速、最简单的连接模式。缺点是数据库一次只能在一个虚拟机中打开。与所有模式一样,持久化数据库和内存数据库都受支持。并发打开数据库的数量或打开连接的数量没有限制。
在嵌入式模式中,SQL 命令的 I/O 操作可以由应用程序的线程执行。应用程序不应中断这些线程,否则可能导致数据库损坏,因为 JVM 在线程中断时会关闭 I/O 句柄。可以考虑其他方法来控制应用程序的执行。当中断可能发生时,异步文件系统可以作为一种解决方法,但不能保证完全安全。建议改用客户端-服务器模型,客户端端可以中断自己的线程。
2.2、服务器模式(Server Mode)
当使用服务器模式(有时称为远程模式或客户端/服务器模式)时,应用程序使用 JDBC 或 ODBC API 远程打开数据库。需要在同一或另一个虚拟机中启动服务器,或者在另一台计算机上启动服务器。通过连接到该服务器,许多应用程序可以同时连接到同一个数据库。在内部,服务器进程以嵌入式模式打开数据库。
服务器模式比嵌入式模式慢,因为所有数据都通过 TCP/IP 传输。与所有模式一样,支持持久化数据库和内存数据库。每个服务器并发打开的数据库数量或打开连接的数量没有限制。
2.3、混合模式(Mixed Mode)
混合模式是嵌入式模式和服务器模式的组合。在一个应用程序以嵌入式模式连接数据库,同时启动数据库服务,以便其他应用程序(在不同进程(虚拟机)中运行)可以同时访问相同的数据。本地连接的速度与仅使用嵌入式模式的数据库一样快,而远程连接稍慢一些。
数据库可以从应用程序内部(使用数据库 API)启动和停止,也可以自动启动(自动混合模式)。在使用自动混合模式时,所有想要连接到数据库的客户端(无论是本地还是远程连接)都可以使用完全相同的 URL 进行连接。
3、H2 服务器类型
H2 支持三种服务器:Web 服务器(用于 H2 控制台)、TCP 服务器(用于客户端/服务器连接)和 PG 服务器(用于 PostgreSQL 客户端);只有 Web 服务器支持浏览器连接。这些服务器可以通过命令行和 API 的方式启动。启动服务器并不会打开数据库——数据库会在客户端连接时打开。
4、H2 数据库类型
H2 支持支持数据库和内存数据库。
4.1、持久数据库
持久数据库数据保存在文件中,嵌入式的连接 URL 为:"jdbc:h2:[file:][<path>]<databaseName>",远程连接的 URL 为:"jdbc:h2:tcp://<server>[:<port>]/[file:][<path>]<databaseName>"。前缀file:是可选的;如果未使用路径或只使用相对路径,则当前工作目录将被用作起点。路径和数据库名称的区分大小写取决于操作系统,但建议仅使用小写字母。数据库名称必须至少为三个字符长(File.createTempFile的限制)。
4.2、内存数据库
对于某些用例(例如:快速原型设计、测试、高性能操作、只读数据库),可能不需要持久化数据。H2 支持内存模式,其中数据不会被持久化。
某些情况下,只需要一个到内存数据库的连接。这意味着要打开的数据库是私有的。在这种情况下,数据库 URL 是 "jdbc:h2:mem:",在同一虚拟机中打开两个连接意味着打开两个不同的(私有)数据库。
有时需要多个连接到同一个内存数据库;在这种情况下,数据库 URL 必须包含一个名称。例如:"jdbc:h2:mem:db1",使用此 URL 访问相同的数据库仅在同一虚拟机中有效。
要从另一个进程或另一台计算机访问内存数据库,需要在创建内存数据库的同一进程中启动一个 TCP 服务器。然后,其他进程通过 TCP/IP 或 TLS 访问数据库,使用类似于 "jdbc:h2:tcp://localhost/mem:db1" 的 URL。
默认情况下,关闭数据库的最后一个连接会关闭数据库。对于内存数据库,这意味着内容会丢失。要保持数据库处于打开状态,请在 URL 中添加”;DB_CLOSE_DELAY=-1“,如:"jdbc:h2:mem:test;DB_CLOSE_DELAY=-1";这样可在虚拟机存活期间保持内存数据库的内容。
5、数据库连接 URL
H2 数据库支持多种连接模式和连接设置,可以通过不同的数据库URL实现。URL中的设置不区分大小写。
连接方式 | 连接 URL |
嵌入式(本地)连接 |
jdbc:h2:[file:][<path>]<databaseName> |
内存模式(私有的) |
In-memory (private) |
内存模式(命名的) |
jdbc:h2:mem:<databaseName> |
服务器模式(远程连接) 使用 TCP/IP |
jdbc:h2:tcp://<server>[:<port>]/[<path>]<databaseName> |
服务器模式(远程连接) 使用 TLS |
jdbc:h2:ssl://<server>[:<port>]/[<path>]<databaseName> |
使用加密文件 |
jdbc:h2:<url>;CIPHER=AES |
6、安装
6.1、服务器模式
官网(https://h2database.com/html/download.html)下载 H2 安装文件,这里下载平台无关的 Zip 安装文件;下载完成后解压并执行 bin/h2.bat 命令,该命令会启动所有三种服务器: Web 服务器(端口 8082)、TCP 服务器(端口 9092)、PG 服务器(端口 5435)。启动后会自动弹出 H2 控制台的页面:
6.2、嵌入式或混合模式
引入相关依赖即可:
<dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>2.2.224</version> </dependency>
参考:
https://h2database.com/html/main.html