我嘗試在
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 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.如果它包含,那么它將與語法,無效名稱或在數據庫服務器端出錯的東西有關.
對于與SQL api相關的任何內容,拋出SQLExceptions,而不僅僅是通過連接發送語句時發生的錯誤…在這種情況下,查詢實際上可能正確運行但結果集API正在給出你的錯誤(rs.getLong(“blah”),你的選擇中不存在列“blah”)導致問題.