H2 教程

概述

H2 是一个开源的嵌入式数据库引擎,采用 java 语言编写,不受平台的限制。同时 H2 提供了一个十分方便的 web 控制台用于操作和管理数据库内容。H2 还提供兼容模式,可以兼容一些主流的数据库,因此采用 H2 作为开发期的数据库非常方便。

使用说明

H2 控制台应用

H2 允许用户通过浏览器接口方式访问 SQL 数据库。

  1. 进入官方下载地址arrow-up-right,选择合适版本,下载并安装到本地。

  2. 启动方式:在 bin 目录下,双击 jar 包;执行 java -jar h2*.jar;执行脚本:h2.bath2.sh

arrow-up-right

点击 Connect ,可以进入操作界面:

arrow-up-right

操作界面十分简单,不一一细说。

嵌入式应用

JDBC API

详见:Using the JDBC APIarrow-up-right

连接池

详见:Connection Poolarrow-up-right

Maven

详见:Maven 2arrow-up-right

Hibernate

hibernate.cfg.xml (or use the HSQLDialect):

详见:Hibernatearrow-up-right

TopLink 和 Glassfish

Datasource class: org.h2.jdbcx.JdbcDataSource oracle.toplink.essentials.platform.database.H2Platform

详见:TopLink and Glassfisharrow-up-right

运行方式

嵌入式

数据库持久化存储为单个文件。

连接字符串:\~/.h2/DBName 表示数据库文件的存储位置,如果第一次连接则会自动创建数据库。

  • jdbc:h2:\~/test - 'test' 在用户根目录下

  • jdbc:h2:/data/test - 'test' 在 /data 目录下

  • jdbc:h2:test - 'test' 在当前工作目录

内存式

数据库只在内存中运行,关闭连接后数据库将被清空,适合测试环境

连接字符串:jdbc:h2:mem:DBName;DB_CLOSE_DELAY=-1

如果不指定 DBName,则以私有方式启动,只允许一个连接。

  • jdbc:h2:mem:test - 一个进程中有多个连接

  • jdbc:h2:mem: - 未命名的私有库,一个连接

服务模式

H2 支持三种服务模式:

  • web server:此种运行方式支持使用浏览器访问 H2 Console

  • TCP server:支持客户端/服务器端的连接方式

  • PG server:支持 PostgreSQL 客户端

启动 tcp 服务连接字符串示例:

  • jdbc:h2:tcp://localhost/\~/test - 用户根目录

  • jdbc:h2:tcp://localhost//data/test - 绝对路径

启动服务

执行 java -cp *.jar org.h2.tools.Server

执行如下命令,获取选项列表及默认值

常见的选项如下:

  • -web:启动支持 H2 Console 的服务

  • -webPort :服务启动端口,默认为 8082

  • -browser:启动 H2 Console web 管理页面

  • -tcp:使用 TCP server 模式启动

  • -pg:使用 PG server 模式启动

设置

  • jdbc:h2:..;MODE=MySQL 兼容模式(或 HSQLDB 等)

  • jdbc:h2:..;TRACE_LEVEL_FILE=3 记录到 *.trace.db

连接字符串参数

  • DB_CLOSE_DELAY - 要求最后一个正在连接的连接断开后,不要关闭数据库

  • MODE=MySQL - 兼容模式,H2 兼容多种数据库,该值可以为:DB2、Derby、HSQLDB、MSSQLServer、MySQL、Oracle、PostgreSQL

  • AUTO_RECONNECT=TRUE - 连接丢失后自动重新连接

  • AUTO_SERVER=TRUE - 启动自动混合模式,允许开启多个连接,该参数不支持在内存中运行模式

  • TRACE_LEVEL_SYSTEM_OUTTRACE_LEVEL_FILE - 输出跟踪日志到控制台或文件, 取值 0 为 OFF,1 为 ERROR(默认值),2 为 INFO,3 为 DEBUG

  • SET TRACE_MAX_FILE_SIZE mb - 设置跟踪日志文件的大小,默认为 16M

maven 方式

此外,使用 maven 也可以启动 H2 服务。添加以下插件

在命令行中执行如下命令启动 H2 Console

或者建立一个 bat 文件

此操作相当于执行了如下命令:

Spring 整合 H2

  1. 添加依赖

  1. spring 配置

H2 SQL

SELECT

arrow-up-right

INSERT

arrow-up-right

UPDATE

arrow-up-right

DELETE

arrow-up-right

BACKUP

arrow-up-right

EXPLAIN

arrow-up-right

7、MERGE arrow-up-right

RUNSCRIPT

运行 sql 脚本文件

arrow-up-right

SCRIPT

根据数据库创建 sql 脚本

arrow-up-right

SHOW

arrow-up-right

ALTER

ALTER INDEX RENAME

arrow-up-right

ALTER SCHEMA RENAME

arrow-up-right

ALTER SEQUENCE

arrow-up-right

ALTER TABLE

arrow-up-right

增加约束

arrow-up-right

修改列

arrow-up-right

删除列

arrow-up-right

删除序列

arrow-up-right

ALTER USER

修改用户名

arrow-up-right

修改用户密码

arrow-up-right

ALTER VIEW

arrow-up-right

COMMENT

arrow-up-right

CREATE CONSTANT

arrow-up-right

CREATE INDEX

arrow-up-right

CREATE ROLE

arrow-up-right

CREATE SCHEMA

arrow-up-right

CREATE SEQUENCE

arrow-up-right

CREATE TABLE

arrow-up-right

CREATE TRIGGER

arrow-up-right

CREATE USER

arrow-up-right

CREATE VIEW

arrow-up-right

DROP

arrow-up-right

GRANT RIGHT

给 schema 授权授权

arrow-up-right

给 schema 授权给 schema 授权

arrow-up-right

复制角色的权限

arrow-up-right

REVOKE RIGHT

移除授权

arrow-up-right

移除角色具有的权限

arrow-up-right

ROLLBACK

从某个还原点(savepoint)回滚

arrow-up-right

回滚事务

arrow-up-right

创建 savepoint

arrow-up-right

数据类型

arrow-up-right

INT Type

arrow-up-right

集群

H2 支持两台服务器运行两个数据库成为集群,两个数据库互为备份,如果一个服务器失效,另一个服务器仍然可以工作。另外只有服务模式支持集群配置。

H2 可以通过 CreateCluster 工具创建集群,示例步骤如下(在在一台服务器上模拟两个数据库组成集群):

  • 创建目录

    • 创建两个服务器工作的目录

  • 启动 tcp 服务

    • 执行如下命令分别在 9101、9102 端口启动两个使用 tcp 服务模式的数据库

  • 使用 CreateCluster 工具创建集群

    • 如果两个数据库不存在,该命令将会自动创建数据库。如果一个数据库失效,可以先删除坏的数据库文件,重新启动数据库,然后重新运行 CreateCluster 工具

  • 连接数据库现在可以使用如下连接字符串连接集群数据库

    • 监控集群运行状态

    • 可以使用如下命令查看配置的集群服务器是否都在运行

  • 限制

    • H2 的集群并不支持针对事务的负载均衡,所以很多操作会使两个数据库产生不一致的结果

  • 执行如下操作时请小心:

    • 自动增长列和标识列不支持集群,当插入数据时,序列值需要手动创建不支持 SET AUTOCOMMIT FALSE 语句;

    • 如果需要设置成为不自动提交,可以执行方法 Connection.setAutoCommit(false)

参考资料

最后更新于