2013-05-09 91 views
0

我們正在嘗試使用PreparedStatement從Oracle數據庫提取數據。它在從PL/SQL開發者運行時一直運行並提取數據時保持獲取零記錄。從Oracle數據庫提取數據不起作用

我們在嘗試調試時發現了根本原因。在調試代碼時,正確地獲取了兩條記錄。

我們通過放置這段代碼做了一個臨時修復。

ResultSet rs = ps.executeQuery(); 
    while(!rs.hasNext()){ 
     ps.executeQuery();} 

This Works。但這不是最好的解決方案,因爲它會導致不必要的數據庫命中。它顯然看起來像一個時間問題。我們還明確提交了早期的事務,因爲它們可能會影響此查詢的結果。

什麼可能導致這種情況。解決這個問題的最好方法是什麼?

的方法是相當大的:我就在這裏發表一些地方:

private static boolean loadCommission(Member member){ 
     Connection conn = getConnection("schema1"); //obtained through connection pool 
     //insertion into table 
     conn.close(); 
     Conn conn2 = getConnection("schema2"); //obtained through connection pool 
     PreparedStatement ps = conn2.prepareStatement(sql); 
     //this sql combines data from schema1       
     // and 2 with DB links 
     ResultSet rs = ps.executeQuery(); 
     //business logic 
     conn2.close(); 
     return true; 
     } 

感謝

我們試圖昨天一些事情。我們用直接的jdbc連接代替了第二個連接代碼,例如

Connection conn = DriverManager.getConnection(URL, USER, PASS); 

這也適用。現在我們不確定延遲是從池中獲取連接還是在完成之前的事務中,就像我們之前所想的那樣。

+0

你能不能分享你的完整代碼而沒有臨時修復 – 2013-05-09 14:08:33

回答

0

如果您的查詢從物化視圖中選擇,那麼可能會有一段時間纔會產生結果(因爲物化視圖在提交後不必立即刷新,具體取決於它們的創建方式)。

如果是這種情況,那麼您可以通過直接從基表(或等效的非物化視圖)中選擇或強制刷新物化視圖來解決問題。

+0

這裏沒有物化視圖。 – user1185076 2013-05-10 05:44:54