Java common JDBC SQL 使用 HSQLDB 的单元测试查询策略和使用 MySQL 的运行时

Java common JDBC SQL Query strategy for Unit Test using HSQLDB and runtime using MySQL

我正在开发 Java Vert.x 3 应用程序。我使用 HSQLDB 来测试内存数据库,使用 MySQL 8.0.20 进行运行时测试。部署 vertx verticle 时,它​​会初始化 db 和 tables。由于这是一个通用代码,并且 HSQLDB 和 MySQL 之间存在不同的 SQL 语法,更可笑的是,HSQLDB 将所有 属性 大写名称,我必须双引号属性才能使用小写。我想知道如何实现这一目标。这是我的问题:

(1) HSQLDB 使用“IDENTITY”关键字创建内存数据库table。这会导致 MySQL 数据库中出现运行时错误,因为“IDENTITY”不是有效关键字。这是我现在面临的一个挑战。

(2) 如果不可能有一个通用的 SQL 语法同时满足 MySQL 和 HSQLDB,那么拆分这个通用执行路径的最佳方法是什么基于 java 应用程序运行时配置文件,因为此数据库初始化是在作为应用程序核心的 Verticle 的 start 函数中完成的?

欢迎任何建议和见解。

解决方案:抛弃 HSQLDB 并使用带 database_to_upper=false 选项的 H2。

您可以使用 MySQL 兼容模式创建 HSQLDB 数据库(将 ;sql.syntax_mys=true 附加到 JDBC URL。在此模式下,您可以执行以下操作:

使用 MySQL 语法创建 TABLE。 HSQLDB 将 MySQL 的 AUTO_INCREMENT 关键字理解为 IDENTITY 的别名。它还理解所有其他 MySQL 特定的语法。

列名大写真的不是问题。列名大写后,您可以在 SELECT 语句中使用任何大小写而无需引用。这意味着您可以 运行 与在 HSQLDB 上用于 MySQL 的相同查询。

http://hsqldb.org/doc/2.0/guide/compatibility-chapt.html#coc_compatibility_mysql