2012-03-06 91 views
4

我試圖執行在Java中使用的JdbcTemplate以下Oracle查詢:嵌套的異常是java.sql.SQLException中:無效的列名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;    
     }  
} 
+0

以及你如何在Java中編寫它? – Naved 2012-03-06 07:53:27

+0

是否確定查詢是正確讀取的,因爲您正在從屬性文件中讀取它? – GolezTrol 2012-03-06 08:16:31

+0

是的,我很確定,因爲如果它沒有正確地讀取語句,java會拋出NoSuchElementException,其中沒有找到相關的鍵。 – Best 2012-03-06 08:19:15

回答

2

您收到此錯誤的原因是因爲它是來自JDBC驅動程序或java.sql API的錯誤,而不是來自數據庫。請注意異常消息中缺少ORA-XXXXX。如果它包含那個,那麼它將與語法,無效名稱或在數據庫服務器端會出錯的東西有關。

SQLExceptions在java中拋出與SQL api相關的任何事情,而不僅僅是在語句通過連接發送時發生的錯誤......在這種情況下,事實上查詢可能正確運行,但結果設置API給你錯誤(rs.getLong(「blah」),其中列「blah」不存在於你的選擇)導致問題。

相關問題