【发布时间】:2016-08-25 12:34:36
【问题描述】:
我有这个问题:
SELECT col FROM table WHERE
last_updated > SYS_EXTRACT_UTC(systimestamp) - INTERVAL ? DAY TO SECOND(1)
在我的数据库访问代码中,
stmt.setString(1, "0 00:01:30.0");//stmt is OraclePreparedStatement
rs = stmt.executeQuery();//results in exception
异常消息:java.sql.SQLSyntaxErrorException:ORA-00933:SQL 命令未正确结束
如果我替换绑定并在 Sql Developer 中运行查询,它会正常运行。 java代码哪里错了?
【问题讨论】:
-
在 SELECT 语句的末尾添加分号 (;) 看看是否有帮助。
-
@mathguy:不,这会让事情变得更糟:stackoverflow.com/q/10728377/330315
-
不幸的是,您不能将间隔的值作为这样的参数传递。
-
@a_horse_with_no_name - 谢谢!的确,直到五秒钟前(在我完成打字时更多),我是许多认为 ;是 Oracle SQL 中的语句终止符。现在我知道得更清楚了。 (我只是快速查看了 SQL*Plus 手册,如果您知道 ';' 不是 SQL 的一部分,您可以看到它与手册所说的一致;但如果您事先不知道,它是从手册的编写方式很难理解。)
-
@mathguy:
;是 SQL 中的语句终止符 - SQL 客户端使用它来识别各个语句。但在 JDBC 中,您只发送 single 语句,因此您可能不会在查询字符串中包含;。然而,这是 Oracle JDBC 驱动程序(或后端)的限制 - 其他驱动程序或 DBMS do 允许发送;