我正在使用從Java數據庫獲取數據的Java準備語句。由於某些性能問題,查詢使用「虛擬列」作爲索引。準備好的語句 - 將函數用作where子句的一部分
查詢看起來是這樣的:
String status = "processed";
String customerId = 123;
String query = "SELECT DISTINCT trans_id FROM trans WHERE status = " + status + " AND FN_GET_CUST_ID(trans.trans_id) = " + customerId;
Connection conn = getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = conn.prepareStatement(query);
ps.execute();
...
} catch (...)
這是行不通的。將函數作爲where子句的一部分導致SQLException。我知道CallableStatement,並知道我可以先使用它,然後連接結果。但是,該表使用FN_GET_CUST_ID(trans_id)作爲其索引的一部分。有沒有辦法將使用數據庫函數的預準備語句用作查詢參數?
已處理的狀態應引用。也許這就是導致你的例外的原因,不是嗎? – quosoo 2009-10-05 13:57:02
在WHERE子句中有一個函數應該可以工作,你的問題可能在別處。你能發佈錯誤代碼和消息(SQLException.getErrorCode)嗎?查詢實際上在SQL * Plus中工作嗎? – 2009-10-05 13:58:35
對不起,我發佈的示例並未逐字複製。我試圖削減它,以消除很多多餘的非必要的東西。缺少的引號不是問題。 – emulcahy 2009-10-05 15:16:42