我尝试在Java中使用JdbcTemplate执行以下oracle查询:
select RESOURCE_ID
from REPRO_PRINTING_JOB
where (USER_ID=? and PRINTING_CENTER_ID=?)
group by RESOURCE_ID
union all
select RESOURCE_ID
from REPRO_PRINTING_JOB_OLD
where (USER_ID=? and PRINTING_CENTER_ID=? and STATE='CM')
group by RESOURCE_ID
查询在oracle查询浏览器中运行良好,但在java中执行时不起作用。这个问题的根源可能是什么?我听说Jdbc不能处理区分大小写的问题。这是真的吗?
添加了JAVA代码(已更正):我使用getStatement()调用查询,它从外部源(属性文件)检索查询,如下所示:
public List<PrintingJob> getPrintingJobsByCreatedUserId(String createdUserId, String userId) {
if(log.isDebugEnabled()) {
log.debug("getReportItemsByUserId(" + createdUserId + "," + userId + ")");
}
try {
System.out.println("getPrintingJobsByResourceId : createdUserId :"+createdUserId+",userId : "+userId);
return getJdbcTemplate().query(getStatement("gen.report.userid"),
new Object[]{createdUserId, userId, createdUserId, userId},
new PrintingJobMapper());
} catch (DataAccessException ex) {
log.error("Error executing query: " + ex.getClass() + ":" + ex.getMessage());
return null;
}
}
您得到这个错误的原因是因为它是来自JDBC驱动程序或java.sql API的错误,而不是来自数据库的错误。请注意异常消息中缺少ORA-XXXXX。如果它包含这一点,那么它将与语法、无效名称或数据库服务器端出现的问题有关。
SQLExceptions在java中被抛出,用于与SQLapi相关的任何内容,而不仅仅是通过连接发送语句时发生的错误。。。在这种情况下,很可能查询实际上运行正确,但结果集API给了您错误(rs.getLong("blah"),其中列"blah"不存在于您的选择中)导致了问题。