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 只是为了检查问题所在,然后想一个不是关键字的名称。
我刚刚更新了我的 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 只是为了检查问题所在,然后想一个不是关键字的名称。