嵌套异常是java.sql.SQLException:无效的列名ORACLE

时间:2012-03-06 07:43:03

标签: java oracle jdbc

我尝试在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;            
        }       
}

1 个答案:

答案 0 :(得分:2)

您收到此错误的原因是因为它是来自JDBC驱动程序或java.sql API的错误,而不是来自数据库的错误。请注意异常消息中缺少ORA-XXXXX。如果它包含,那么它将与语法,无效名称或在数据库服务器端出错的东西有关。

在java中抛出SQLExceptions以获取与SQL api相关的任何内容,而不仅仅是通过连接发送语句时发生的错误...在这种情况下,查询实际上可能正确运行但结果集API会给你错误(rs.getLong(&#34; blah&#34;),其中列&#34; blah&#34;不存在于你的选择中)导致问题。