🙊
关于作者
  • 个人简历
  • 联系作者
  • 运维日常记录
    • RAID 磁盘阵列
    • MBR 与 GPT 分区
    • Linux 命令行判断GPT和MBR分区
    • CentoS 7 系统 扩容根分区
  • Linux运维学习笔记
    • 计算机网络基础知识
    • Linux 系统启动过程
    • Linux 命令基本格式
    • Linux 文件删除原理
    • Linux 目录结构说明
    • Linux 查看命令帮助信息
    • Linux Yum 命令
    • Linux Apt 命令
  • Linux 运维管理
    • Linux 硬件管理
    • Linux 软件管理
    • Linux 磁盘管理
    • Linux 系统管理
    • Linux 网络管理
    • Linux 用户和组管理
    • Linux 文件与目录管理
    • Linux 文件压缩与解压缩管理
    • Linux SSL证书自动更新管理
  • 运维环境搭建
    • CentOS 7 安装与优化
    • CentOS 安装高版本Node.js
    • CentOS 升级安装Python2.7.X
    • CentOS 安装 Python3.8.X
    • CentOS 安装 PHP7.4.X
    • CentOS 安装 Mysql 8.0
    • CentOS 安装 Zabbix 5.0
    • Windows Server 部署 IIS
    • Cronsun 任务管理器部署
    • Teltport 堡垒机部署
    • Jump Server 堡垒机搭建及使用
    • CI & CD 持续集成部署
    • ELK6.5.0+Filebeat 日志系统部署
    • Lustre 分布式并行文件系统部署
  • 系统安全加固
    • Linux 操作系统加固
    • Windows 操作系统安全加固
    • Password 安全加固
    • OpenSSL 安全加固
    • NFS 服务安全加固
    • Rsync 服务安全加固
    • IIS 服务安全加固
    • PHP 语言环境安全加固
    • Apache 服务安全加固
    • Nginx 服务安全加固
    • Tomcat 服务安全加固
    • MySQL 服务安全加固
    • PostgreSQL 服务安全加固
    • Redis 服务安全加固
    • MongoDB 服务安全加固
    • 暴力破解攻击和防御
  • 云原生运维教程
    • Docker 理论
    • Docker 基本架构
    • Docker 基本概念
    • Docker 基本使用
      • 容器
      • 镜像
      • 仓库
    • Docker 存储
    • Docker 网络
    • Docker 安装
  • Linux 系统故障排查
    • Linux 系统重置密码方法
    • Linux 系统误操作修改目录权限为 777 修复方法
  • Windows 系统故障排查
    • Windows 和 Windows Server 中启用/禁用 SMBv1、SMBv2 和 SMBv3
    • Windows10建立映射网络驱动器报错,无法挂载共享文件系统,解决办法
  • 运维工具使用
    • 常用 Git 命令简介及使用
    • 常用 SVN 命令简介及使用
    • 常用 Vi / Vim 文本编辑工具简介及使用
    • 国内常用加速源使用及配置
    • 软碟通制作U启动和再生龙恢复Linux系统及备份
    • 常用JetBrains系列IDE快捷键
  • 中间件教程学习
    • Nginx 极简教程
    • Nginx 安装
    • Nginx 配置
    • Nginx 问题集
    • Mysql 教程
    • Mysql 运维
    • Mysql 原理
    • Redis 教程
    • Redis 持久化
    • Redis 复制
    • Redis 哨兵
    • Redis 集群
    • Redis 运维
    • PostgreSQL 教程
    • H2 教程
    • SqLite 教程
    • 数据库中间件 flyway
  • Nginx 入门教程
  • MySQL 入门教程
  • Nosql 数据库
  • 常用工具快捷键
    • Windows10常用快捷键大全
  • Group 1
由 GitBook 提供支持
在本页
  • 概述
  • 使用说明
  • H2 控制台应用
  • 嵌入式应用
  • 运行方式
  • Spring 整合 H2
  • H2 SQL
  • SELECT
  • INSERT
  • UPDATE
  • DELETE
  • BACKUP
  • EXPLAIN
  • RUNSCRIPT
  • 数据类型
  • 集群
  • 参考资料

这有帮助吗?

  1. 中间件教程学习

H2 教程

上一页PostgreSQL 教程下一页SqLite 教程

最后更新于5年前

这有帮助吗?

概述

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

使用说明

H2 控制台应用

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

  1. 进入,选择合适版本,下载并安装到本地。

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

  3. 在浏览器中访问:

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

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

嵌入式应用

JDBC API

Connection conn = DriverManager.
    getConnection("jdbc:h2:~/test");
conn.close();

连接池

import org.h2.jdbcx.JdbcConnectionPool;
JdbcConnectionPool cp = JdbcConnectionPool.
create("jdbc:h2:~/test", "sa", "sa");
Connection conn = cp.getConnection();
conn.close(); cp.dispose();

Maven

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.197</version>
</dependency>

Hibernate

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

<property name="dialect">
    org.hibernate.dialect.H2Dialect
</property>

TopLink 和 Glassfish

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

运行方式

嵌入式

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

连接字符串:\~/.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

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

java -cp h2*.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_OUT、TRACE_LEVEL_FILE - 输出跟踪日志到控制台或文件, 取值 0 为 OFF,1 为 ERROR(默认值),2 为 INFO,3 为 DEBUG

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

maven 方式

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

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <executions>
    <execution>
      <goals>
        <goal>java</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <mainClass>org.h2.tools.Server</mainClass>
    <arguments>
      <argument>-web</argument>
      <argument>-webPort</argument>
      <argument>8090</argument>
      <argument>-browser</argument>
    </arguments>
  </configuration>
</plugin>

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

mvn exec:java

或者建立一个 bat 文件

@echo off
call mvn exec:java
pause

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

java -jar h2-1.3.168.jar -web -webPort 8090 -browser

Spring 整合 H2

  1. 添加依赖

<dependency>
  <groupId>com.h2database</groupId>
  <artifactId>h2</artifactId>
  <version>1.4.194</version>
</dependency>
  1. spring 配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:jdbc="http://www.springframework.org/schema/jdbc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
            http://www.springframework.org/schema/jdbc
            http://www.springframework.org/schema/jdbc/spring-jdbc.xsd">

  <!--配置数据源-->
  <bean id="dataSource" class="org.h2.jdbcx.JdbcConnectionPool"
        destroy-method="dispose">
    <constructor-arg>
      <bean class="org.h2.jdbcx.JdbcDataSource">
        <!-- 内存模式 -->
        <property name="URL" value="jdbc:h2:mem:test"/>
        <!-- 文件模式 -->
        <!-- <property name="URL" value="jdbc:h2:testRestDB" /> -->
        <property name="user" value="root"/>
        <property name="password" value="root"/>
      </bean>
    </constructor-arg>
  </bean>

  <!-- JDBC模板 -->
  <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <constructor-arg ref="dataSource"/>
  </bean>
  <bean id="myJdbcTemplate" class="org.zp.notes.spring.jdbc.MyJdbcTemplate">
    <property name="jdbcTemplate" ref="jdbcTemplate"/>
  </bean>

  <!-- 初始化数据表结构 -->
  <jdbc:initialize-database data-source="dataSource" ignore-failures="ALL">
    <jdbc:script location="classpath:sql/h2/create_table_student.sql"/>
  </jdbc:initialize-database>
</beans>

H2 SQL

SELECT

INSERT

UPDATE

DELETE

BACKUP

EXPLAIN

RUNSCRIPT

运行 sql 脚本文件

SCRIPT

根据数据库创建 sql 脚本

SHOW

ALTER

ALTER INDEX RENAME

ALTER SCHEMA RENAME

ALTER SEQUENCE

ALTER TABLE

增加约束

修改列

删除列

删除序列

ALTER USER

修改用户名

修改用户密码

ALTER VIEW

COMMENT

CREATE CONSTANT

CREATE INDEX

CREATE ROLE

CREATE SCHEMA

CREATE SEQUENCE

CREATE TABLE

CREATE TRIGGER

CREATE USER

CREATE VIEW

DROP

GRANT RIGHT

给 schema 授权授权

给 schema 授权给 schema 授权

复制角色的权限

REVOKE RIGHT

移除授权

移除角色具有的权限

ROLLBACK

从某个还原点(savepoint)回滚

回滚事务

创建 savepoint

数据类型

INT Type

集群

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

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

  • 创建目录

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

  • 启动 tcp 服务

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

  • 使用 CreateCluster 工具创建集群

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

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

    • 监控集群运行状态

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

  • 限制

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

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

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

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

参考资料

详见:

详见:

详见:

详见:

详见:

7、MERGE

Using the JDBC API
Connection Pool
Maven 2
Hibernate
TopLink and Glassfish
h2database 官网
Java 嵌入式数据库 H2 学习总结(一)——H2 数据库入门
官方下载地址
http://localhost:8082,应该可以看到下图中的页面: