当前位置 : 首页 » 文章分类 :  开发  »  H2

H2

H2 内存数据库

H2是纯JAVA编写的轻量级数据库


本地启动并连接H2数据库

h2单测sql报错时,可以通过下面方法手动启动h2数据库,手动执行sql看是否有语法错误

方法1、
进入 .m2/repository/com/h2database/h2/1.4.200 目录
执行 java -jar h2-1.4.200.jar 会前台启动 h2 数据库,同时会打开一个 h2 控制台页面
http://localhost:8082/login.jsp?jsessionid=21627d0f645cca6b1fe8ae7a6acf7a64
用户名 sa 密码为空,直接可连接进入控制台

方法2、
进入 .m2/repository/com/h2database/h2/1.4.200 目录
java -classpath h2-1.4.200.jar org.h2.tools.Server -tcp 前台启动 h2 数据库,提示连接地址为 tcp://localhost:9092
再开一个窗口 java -classpath h2-1.4.200.jar org.h2.tools.Console -web 前台启动web客户端
http://localhost:8082?key=ca0c8c7c14ac9c291b2b3f8bbce14001b1e2d5431bfe97659bc268d0bbc4dbaf
用户名 sa 密码为空,直接可连接进入控制台


问题

DEFAULT 语句不能在 COMMENT 之后

单测报错:

Caused by: org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "
...
name VARCHAR(10) COMMENT '名字' DEFAULT 'system' NOT NULL,
...
" expected "[, ::, *, /, %, +, -, ||, ~, !~, NOT, LIKE, ILIKE, REGEXP, IS, IN, BETWEEN, AND, OR, CONSTRAINT, PRIMARY, UNIQUE, NOT, NULL, CHECK, REFERENCES, ,, )"
[42001-195]

原因:
JPA 实体类定义的下面这种写法,会导致 DEFAULT 语句在 COMMENT 之后,从而不符合 h2 语法,报错

@ColumnDefault("'system'")
@Column(columnDefinition = "varchar(10) COMMENT '名字'")
private String name;

解决:
去掉 @ColumnDefault(“‘system’”),默认值写到 columnDefinition 中

@Column(columnDefinition = "varchar(10) DEFAULT 'system' COMMENT '名字'")
private String name;

Index “idx_xxx” already exists

单测报错:

Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Index "IDX_NAME" already exists; SQL statement:
create index idx_name on student (name) [42111-200]

原因:
不同表上有同名索引 IDX_NAME

@Data
@Entity
@Table(name = "student", indexes = {
     @Index(name = "idx_name", columnList = "name")})
public class StudentDO {
}

@Data
@Entity
@Table(name = "teacher", indexes = {
     @Index(name = "idx_name", columnList = "name")})
public class TeacherDO {
}

而 H2 的 key 或者 unique key 是数据库级别而非表级别,因此两张表内存在同名 key 会遇到这个报错,需要保证数据库内key的命名唯一。

解决:
修改同名索引

https://coderec.cn/2016/08/09/单元测试之使用H2-Database模拟数据库环境/


上一篇 LLM 大语言模型

下一篇 Hutool

阅读
评论
547
阅读预计2分钟
创建日期 2023-09-08
修改日期 2023-09-18
类别

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:
navigator:
platform:
userAgent:

评论