Skip to content

h2 database

· 4 min · coding / java / database

h2 数据库#

H2是一个采用java语言编写的嵌入式数据库引擎,只是一个类库(即只有一个 jar 文件),可以直接嵌入到应用项目中,不受平台的限制

应用场景#

连接模式#

tcp 服务模式#

服务器模式(Server Mode):使用服务器模式和内嵌模式一样,它可以跑在另一个进程里

Terminal window
java -classpath h2-2.1.212.jar org.h2.tools.Server -ifNotExists -tcp -tcpPort 9092 -tcpAllowOthers -web -webPort 8092 -browser -webAllowOthers

参数说明#

内存模式#

内嵌模式(Embedded Mode):内嵌模式下,应用和数据库同在一个JVM中,通过JDBC进行连接。可持久化,但同时只能一个客户端连接。内嵌模式性能会比较好

使用#

作为服务端使用#

与spring-boot集成#

spring:
datasource:
url: jdbc:h2:mem:chore;MODE=MySQL;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE #mem:连接到内存
# url: jdbc:h2:file:~/chore;MODE=MySQL;AUTO_SERVER=true #file 连接到文件
# url: jdbc:h2:tcp://localhost/~/DevSoftWare/developer/h2-data/chore;MODE=MySQL;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE # tcp 连接到tcp
driver-class-name: org.h2.Driver
username: olsond
password: 123456
# spring-boot2.5.x以下版本使用
# schema: classpath: classpath:db/schema.sql
# springboot2.5.x以上版本已弃用spring.datasource.schema属性,可以使用以下配置初始化sql
sql:
init:
mode: always
schema-locations: ['classpath:db/schema.sql']
data-locations: ['classpath:db/init.sql']
h2:
console:
enabled: true # 开启web访问控制台
path: /h2-console

使用过程的问题#

无法创建数据库#

mysql语法不兼容#

场景#

DROP TABLE IF EXISTS TEST;
CREATE TABLE TEST(
ID INT PRIMARY KEY comment '主键',
NAME VARCHAR(255) not null comment '名字'
);

解决方案#

DROP TABLE IF EXISTS TEST;
CREATE TABLE TEST(
ID INT PRIMARY KEY comment '主键',
NAME VARCHAR(255) not null comment '名字'
);
COMMENT on TABLE TEST is 'demo';
COMMENT on COLUMN TEST.ID is '主键';
COMMENT on COLUMN TEST.NAME is '名字';

**注意: 表注释还是需要单独声明 COMMENT on TABLE tablename is ''