2012-03-16 49 views
4

遍歷結果集我想實現使用JDBC像SQL存儲過程在java中的任務。 在SQL中,當我們編寫遊標時,首先執行select查詢,然後獲取記錄,然後執行一些操作。我們可以執行一些查詢,而在Java

很有可能我已經打響了蜂巢選擇查詢。我的選擇查詢包含30條記錄,但是當我執行它時,我的while(res.next())只執行一次。

但不是查詢我只是嘗試顯示字段,檢查其是否獲取或不 則是工作的罰款。(while循環只包含System.out.println語句)

sql="select * from tbl_name"; 
res=stmt.executeQuery(sql); 

while(res.next()) 
{ 
    S.O.P.("fields : "+res.getString(0)); 
} 

(我認爲,當結果集遍歷時,如果在兩個查詢之間有查詢得到執行,但在同一時間循環也得到執行,並在經過一段時間查詢執行完成後,reslutset while循環也得到完成,因此它得到執行一次吧。我不知道這件事。)

爲什麼它正在發生,我沒有得到。我做錯了什麼?

回答

0

它不會發生這樣的,你可以嘗試,直到你的查詢被執行環路將等待。

+0

我以前做過這樣的任務,很好。現在我遇到了這樣的問題。不知道爲什麼?我多次檢查每一件事,但沒有得到。 – 2012-03-16 06:45:49

2

我會調整你的流程。首先,不要嘗試重複使用相同的Statement對象來執行新的查詢。例如,當我嘗試使用PostgreSQL驅動程序時,我很容易發生異常,「此ResultSet已關閉」。

相反,它改寫爲這樣的:

Connection conn = DriverManager.getConnection(...); 
Statement outerStatement = conn.createStatement(); 
ResultSet outerResultSet = outerStatement.executeQuery("..."); 

while (outerResultSet.next()) { 
    Statement innerStatement = conn.createStatement(); 
    ResultSet innerResultSet = innerStatement.executeQuery("..."); 
    while (innerResultSet.next()) { 
     // ... 
    } 
    innerResultSet.close(); 
    innerStatement.close(); 
} 
outerResultSet.close(); 
outerStatement.close(); 
conn.close(); 

當然,與try-catch-finally環繞需要。

0

理想情況下,你只能有一個說法,在一個時刻對一個數據庫連接執行的,所以你可以創建並執行第二條語句,或通過從第一個語句的結果集進行迭代,並存儲在收集的數據(例如,在hashlist的arraylist)然後關閉該語句並運行第二個,這次從您保存它們的集合中檢索id。

+1

針對單個連接打開多條語句完全可以。 JDBC不支持爲單個'Statement'打開多個'ResultSet'。你不需要打開一個全新的連接來進行第二個查詢;只需創建一個新的'Statement'並使用它。 – 2012-03-16 07:14:22

8

每個Statement一次只能有一個打開的ResultSet。從文檔:

默認情況下,只有每一個Statement對象ResultSet對象可以在同一時間打開 。因此,如果一個ResultSet對象的讀數是 與另一個ResultSet對象的讀數交錯,則每個必須由不同的Statement對象生成 。如果 已打開,則語句 接口中的所有執行方法隱式關閉語句的當前ResultSet對象。

executeQuery你的循環中的調用將隱式關閉外ResultSet,所以這就是爲什麼你只看到一排。

+0

我也試過這個,但仍然執行相同(只執行一次,我交叉檢查結果集本身是否包含1行,我檢查了這個查詢,它給了我30行作爲輸出)。 – 2012-03-16 08:51:46

+0

我嘗試過使用不同的語句和結果集對象,但似乎內部語句執行關閉了外部結果集。當我使用新的連接對象創建內部語句時,問題就解決了。我想知道在遍歷結果集的同時創建不同的連接對象是否可取。 – 2012-03-20 11:28:23

+0

您可以重複使用相同的'Connection'對象來創建多個'Statements',返回多個'ResultSet'。 – 2012-03-27 04:23:32

相關問題