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 

嵌入式(本地)连接
[Embedded (local) connection)]

jdbc:h2:[file:][<path>]<databaseName>
jdbc:h2:~/test
jdbc:h2:file:/data/sample
jdbc:h2:file:C:/data/sample (Windows only)

内存模式(私有的)
[In-memory (private)]

 In-memory (private)

内存模式(命名的)
[In-memory (named)]

jdbc:h2:mem:<databaseName>
jdbc:h2:mem:test_mem

服务器模式(远程连接) 使用 TCP/IP
[Server mode (remote connections) using TCP/IP]

jdbc:h2:tcp://<server>[:<port>]/[<path>]<databaseName>
jdbc:h2:tcp://localhost/~/test
jdbc:h2:tcp://dbserv:8084/~/sample
jdbc:h2:tcp://localhost/mem:test

服务器模式(远程连接) 使用 TLS
[Server mode (remote connections) using TLS]

jdbc:h2:ssl://<server>[:<port>]/[<path>]<databaseName>
jdbc:h2:ssl://localhost:8085/~/sample;

使用加密文件
[Using encrypted files]

jdbc:h2:<url>;CIPHER=AES
jdbc:h2:ssl://localhost/~/test;CIPHER=AES
jdbc:h2:file:~/secure;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

 

posted @ 2024-05-12 10:27  且行且码  阅读(103)  评论(0编辑  收藏  举报