前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >h2换hsqldb最新版报错

h2换hsqldb最新版报错

作者头像
阿超
发布2023-02-21 08:43:10
4340
发布2023-02-21 08:43:10
举报
文章被收录于专栏:快乐阿超快乐阿超

直接改依赖:

代码语言:javascript
复制
<!--<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>${h2.version}</version>
    <scope>test</scope>
</dependency>-->
<dependency>
    <groupId>org.hsqldb</groupId>
    <artifactId>hsqldb</artifactId>
    <version>2.7.1</version>
    <scope>test</scope>
</dependency>

随便运行一个test报错:

image-20230212222807012
image-20230212222807012

这里提到了关键字:TestDatabaseAutoConfiguration

我们进入org.springframework.boot.test.autoconfigure.jdbc.TestDatabaseAutoConfiguration$EmbeddedDataSourceFactory.getEmbeddedDatabase(TestDatabaseAutoConfiguration.java:191)

发现这里连接为空才会抛异常

image-20230212223548155
image-20230212223548155

那我们ctrl+f8断点打在if这里,shift+f9debug一下

发现进入了EmbeddedDatabaseConnection.get

image-20230212223815174
image-20230212223815174

F7再回车,深入get方法,发现这里的逻辑是如果driverClass存在,则返回对应的连接枚举EmbeddedDatabaseConnection,我们等待hsqldriverClass驱动

image-20230212224200317
image-20230212224200317

f7看下ClassUtils.isPresent,发现是forName

按下f8发现直接到抛出异常返回false了,此时我们丢帧

image-20230212224412070
image-20230212224412070

回到了外面

image-20230212224438056
image-20230212224438056

再按下f7进去,ctrl+w选中forName和参数,按下alt+f8,发现了真正的报错

image-20230212224553965
image-20230212224553965
代码语言:javascript
复制
org/hsqldb/jdbc/JDBCDriver has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
image-20230212224610959
image-20230212224610959

大概意思就是说不支持当前java版本了

我们换个早一点的依赖试试:

代码语言:javascript
复制
<dependency>
    <groupId>org.hsqldb</groupId>
    <artifactId>hsqldb</artifactId>
    <version>2.5.2</version>
    <scope>test</scope>
</dependency>

成功运行下来

image-20230212225254629
image-20230212225254629

之后的报错就很容易解决了,是原来H2ddl(Data Definition Language)COMMENT关键字不支持,我们用正则替换掉

ctrl+r打开替换框,alt+x打开正则模式,输入正则后,按下alt+a替换全部

代码语言:javascript
复制
// 以COMMENT开头,直到遇到","为止,我们这里替换为空即可
COMMENT[^,]+
COMMENT[^,]*
image-20230212230052485
image-20230212230052485

我们再试试另一个正则

代码语言:javascript
复制
// 以[ COMMENT ' ]开头,以'结尾,我们这里替换为空即可
COMMENT '.*'

再次运行,发现不支持NULL DEFAULT xxx格式,替换掉DEFAULT前面的NULL

image-20230212231509792
image-20230212231509792

再次运行,发现不支持无SQL不执行查询,而是会报错

image-20230212231705849
image-20230212231705849

而且不支持CASE field WHEN conditionValue THEN actualValue的语法

image-20230212232854860
image-20230212232854860

因此换回H2了,ctrl+alt+z,选择pom.xml,按下alt+r或者直接回车

image-20230212232949229
image-20230212232949229
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-02-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档