我正在开发Java Vert.x3应用程序。我使用HSQLDB进行内存DB测试,使用MySQL 8.0.20进行运行时测试。在部署vertx verticle时,它会初始化数据库和表。由于这是一个常见的代码,并且HSQLDB和MySQL之间存在不同的SQL语法,更可笑的是,HSQLDB将所有属性名称大写,我必须用双引号将属性引起来才能使用小写。我想知道如何实现这一点。以下是我的问题:
(1) HSQLDB使用IDENTITY关键字创建内存数据库表。这会在MySQL DB中导致运行时错误,因为"IDENTITY“不是有效的关键字。这构成了我现在面临的挑战。
(2)如果不可能有一个同时满足MySQL和HSQLDB的通用SQL语法,那么基于java应用程序运行时配置文件拆分这个公共执行路径的最佳方法是什么,因为这个DB初始化是在应用程序的核心verticle的start函数中完成的?
任何建议和见解都是值得感谢的。
发布于 2020-07-03 17:50:10
解决方案:放弃HSQLDB,使用带有database_to_upper=false选项的H2。
发布于 2020-07-03 18:17:44
您可以创建具有MySQL兼容模式的HSQLDB数据库(将;sql.syntax_mys=true附加到JDBC URL。在此模式下,您可以执行以下操作:
使用CREATE TABLE的MySQL语法。HSQLDB将MySQL的AUTO_INCREMENT关键字理解为身份的别名。它还理解所有其他特定于MySQL的语法。
列名的大写实际上不是问题。列名大写后,您可以在SELECT语句中使用任何不带引号的大小写。这意味着您可以在HSQLDB上运行与MySQL相同的查询。
请参阅http://hsqldb.org/doc/2.0/guide/compatibility-chapt.html#coc_compatibility_mysql
https://stackoverflow.com/questions/62711738
复制相似问题