h2 数据库:避免在 2.0.202 版的查询中使用反引号

h2 database: avoid usage of backticks in queries in version 2.0.202

我刚刚更新了我的 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: Syntax error in SQL statement

如果我运行这样。

为了修复语法错误,我必须像这样将所有字段名称包装到背包中:

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";

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

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

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

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