从JDBC触发SQL命令时出错-java.sql.SQLSyntaxErrorException

时间:2019-05-22 07:47:12

标签: java sql oracle jdbc

我有一个sql查询,该查询在sql plus上触发,并且得到结果。当我从Java代码触发时,相同的查询-jdbc出现异常-

  

java.sql.SQLSyntaxErrorException:ORA-00933:SQL命令不正确   结束。

查询是

select prod_id, prod_area, prod_name, step_name,
       to_char(entry_time, 'DD/MM/YYYY HH24:MI:SS') as entry_time,
       round(extract(day from current_timestamp - entry_time)*1440 +
             extract(hour from current_timestamp - entry_time)*60 +
             extract(minute from current_timestamp - entry_time)) as pending_minutes
from prodreport
where exit_time is null;

java代码

String query = "select prod_id,prod_area,prod_name,step_name,to_char(entry_time, 'DD/MM/YYYY HH24:MI:SS') as entry_time, round(extract(day from current_timestamp - entry_time)*1440 + extract(hour from current_timestamp - entry_time)*60 + extract(minute from current_timestamp - entry_time)) as pending_minutes from prodreport where exit_time is null;"

2 个答案:

答案 0 :(得分:0)

以下一个或两个原因

1)可能是因为您的Java代码查询包含as pending_minutes。您将结果存储在对象中,与使用sql developer在Sql Result工作表中显示的结果不同。

2)where exit_time is null可能对Java代码执行无效(通常取决于您要使用哪种jdbc方法执行-向我们展示您究竟在准备语句和执行语句的方式 ), 尝试这样的事情

String exit_time =  "null"
String query = "select prod_id,prod_area,prod_name,step_name,to_char(entry_time, 'DD/MM/YYYY HH24:MI:SS') as entry_time, round(extract(day from current_timestamp - entry_time)*1440 + extract(hour from current_timestamp - entry_time)*60 + extract(minute from current_timestamp - entry_time)) from prodreport where exit_time is " + exit_time ;

答案 1 :(得分:0)

可能是由于您随查询发送的分号(;)。请仔细使用它,可能会有所帮助。

分号

分号字符是语句终止符。它是ANSI SQL-92标准的一部分,但从未在Transact-SQL中使用。确实,多年来编写T-SQL都可能不会遇到分号。

用法

在两种情况下,您必须使用分号。第一种情况是您使用公用表表达式(CTE),而CTE不是批处理中的第一条语句。第二个是您发布Service Broker语句的位置,而Service Broker语句不是批处理中的第一个语句。