安装
- 从官网下载压缩包
- 解压到任意目录
- 进入
h2/bin
目录,运行java -jar h2*.jar
h2 数据库启动后,会自动使用默认浏览器打开管理页面 http://localhost:8082
使用 H2 控制台
登录界面
- 选择 “Generic H2 (Embedded)” 配置
- JDBC URL 输入
jdbc:h2:~/db_name;
,其它~/db_name
对应用户目录下的 db_name 文件 - 用户名默认为 sa
- 密码可以为空
点击连接后,进入到管理界面
管理界面
管理页面按钮不多,每个按钮的作用,可以将鼠标悬浮到上面,查看 tooltip
导入导出数据库
导入数据库
通过命令行
1 | java -cp h2*.jar org.h2.tools.Script -url jdbc:h2:~/zhp1 -user sa -script zahuopu.sql |
通过控制台
1 | RUNSCRIPT FROM 'test.sql' |
导出数据库
通过命令行
1 | java -cp h2*.jar org.h2.tools.Script -url jdbc:h2:~/config -user sa -script zahuopu.sql |
通过控制台
1 | SCRIPT 'test.sql' |
springboot 单元测试中使用
1 放置文件
将 schema.sql 和 data.sql 放置在 src/test/resources/db/
目录
2 修改配置
打开 application-test.yml,添加 h2 数据库配置
1 | spring: |
H2 的一些配置
mode=mysql
以 mysql 方式运行,对于从 mysql 导出的脚本,会提供很好的兼容性。使用方式有两种:
- 加到 url 中:
url: jdbc:h2:mem:zhp_test;mode=mysql;
- 加到 sql 脚本开头:
SET MODE MYSQL;
REFERENTIAL_INTEGRITY
关闭 REFERENTIAL_INTEGRITY,可以让脚本忽略外键约束,比如插入数据时。加在脚本中的做法是SET REFERENTIAL_INTEGRITY FALSE;
MySQL 脚本转换 H2 脚本
直接导出的 MySQL 脚本,并不能直接用于 H2 数据库,存在语法兼容问题。比如这里所列。
常用导出方法
mysqldump
1 | 只导出表结构 |
phpmyadmin
phpmyadmin 有非常好用的 UI,可以通过配置规则导出,比如:
- 不包含符号 `
- 不包含注释
导出后,比较简单的做法是用正则表达式替换,下面列出了一些:
1 替换注释
COMMENT '[^']+?'
替换为空COMMENT='[^']+?'
替换为空
2 替换 charset
CHARACTER SET utf8 COLLATE utf8_bin
替换为空COLLATE utf8_unicode_ci
替换为空COLLATE=utf8_unicode_ci
替换为空
3 替换数据类型
float(
替换为decimal(
double(
替换为decimal(
4 一次性修改表变为多条
2层
1 | ^(ALTER TABLE .+)\n( ADD .+),\n( ADD .+;) |
3层
1 | ^(ALTER TABLE .+)\n( ADD .+),\n( ADD .+),\n( ADD .+;) |
4层
1 | ^(ALTER TABLE .+)\n( ADD .+),\n( ADD .+),\n( ADD .+),\n( ADD .+;) |
5层
1 | ^(ALTER TABLE .+)\n( ADD .+),\n( ADD .+),\n( ADD .+),\n( ADD .+),\n( ADD .+;) |