【问题标题】:h2 database: avoid usage of backticks in queries in version 2.0.202h2 数据库:避免在 2.0.202 版本的查询中使用反引号
【发布时间】:2022-01-11 23:23:42
【问题描述】:

我刚刚更新了我的 com.h2database 版本 1.4.200 -> 2.0.202。 在以前的版本中,我可以执行如下语句:

private static final String CREATE_TABLE_SQL = "CREATE TABLE IF NOT EXISTS %s (" +
        "name varchar(255) NOT NULL," +
        "value varchar(255) NOT NULL," +
        "PRIMARY KEY (name)" +
        ") ENGINE=InnoDB";

但最新版本抱怨:

org.h2.jdbc.JdbcSQLSyntaxErrorException: SQL 语句中的语法错误

如果我这样运行它。

要修复语法错误,我必须将所有字段名称包装到背包中,如下所示:

private static final String CREATE_TABLE_SQL = "CREATE TABLE IF NOT EXISTS %s (" +
        "`name` varchar(255) NOT NULL," +
        "`value` varchar(255) NOT NULL," +
        "PRIMARY KEY (`name`)" +
        ") ENGINE=InnoDB";

我将 h2 用于 mySQL 模式。我的 JDBC 连接字符串如下所示:

"jdbc:h2:mem:database;TRACE_LEVEL_FILE=0;TRACE_LEVEL_SYSTEM_OUT=0;DATABASE_TO_UPPER=false;MODE=MySQL";

是否可以避免在针对 h2 的每个查询中使用 ``(反引号)符号?并让查询在没有它们的情况下编译?

【问题讨论】:

    标签: java sql jdbc h2


    【解决方案1】:

    name 和/或value 很可能是保留关键字。有数百甚至数千个这样的关键字。只需选择任何其他列名。开始尝试 namex 和 valuex 只是为了检查问题所在,然后想一个不是关键字的名称。

    【讨论】:

    • 是的! (抱歉之前删除的评论)。但是为什么它在以前的版本中可以正常工作?
    • 新的保留关键字一直在添加:(
    • 悲伤的故事 :( 谢谢你的帮助!
    猜你喜欢
    • 2022-01-23
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 2014-11-23
    • 2022-01-08
    • 2014-03-25
    • 1970-01-01
    • 2015-10-13
    相关资源
    最近更新 更多