【发布时间】:2014-09-24 21:14:58
【问题描述】:
我在尝试对内存中的 H2(版本 1.4.181)表运行以下查询时遇到问题:
Object result = hibernateSession
.createSQLQuery("show columns from :myTable")
.setString("myTable", "some_table")
.list();
此查询导致以下异常:
Caused by: org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "SHOW COLUMNS FROM ?[*] "; expected "identifier"; SQL statement: show columns from ? [42001-181]
...
...
...
我做了一些调试,发现在解析查询的过程中,字符“?”测试它是否是一个有效的标识符并且它失败了,导致异常的上升(类 org.h2.command.Parser,第 3027 行):
//currentToken is "?" at this point
if (currentTokenType != IDENTIFIER) {
throw DbException.getSyntaxError(sqlCommand, parseIndex,
"identifier");
}
我认为这是一个错误。你怎么看?
【问题讨论】:
-
SQL 绑定变量不能像那样引用元数据。您需要生成像
show columns from some_table这样的动态 SQL 并执行它。