2010-11-05 110 views
0

我想盡量減少我的SQL查詢,所以我的決心是列出我需要的記錄的所有ID。這樣做,通過一個查詢,我可以獲得有關某個ID的所有信息。如何在java中搜索結果集?

ID   Passed  flag type Total 
123ABC  878   0  1  1070 
123ABC  1272  0  1  1507 
123ABC  1152  0  1  1342 
123ABC  0   0  2  0 
123ABC  1045  0  1  1214 
123ABC  1270  0  1  1471 
123ABC  0   0  1  0 
123ABC  476   0  2  787 
123ABC  96   0  2  158 
123ABC  23   0  3  70 
123ABC  11   0  2  42 
987ZYX  77   1  2  135 
987ZYX  0   1  2  0 
987ZYX  0   1  2  0 
123ABC  487   1  2  513 
123ABC  1   1  2  3 
987ZYX  293   0  2  759 
987ZYX  5611  0  1  6386 
987ZYX  0   0  2  0 
987ZYX  0   0  3  0 

上表顯示了運行我的查詢後得到的結果示例。 問題是,我需要遍歷我的ID列表,並獲取與該ID相關的結果集中的所有記錄。是否有可能將此表(實際上是ResultSet對象)轉換爲ArrayList或HashMap以便於索引,或者我可以使用實際的ResultSet實現它嗎?

+0

ResultSet作爲一個普通的迭代器,所以你必須將數據轉換爲HashMap。 – jutky 2010-11-05 06:07:58

回答

1

這聽起來像你應該能夠用一個子查詢來做到這一點,你從一個SQL語句中的另一個查詢的結果中選擇。

這裏有一個鏈接: http://beginner-sql-tutorial.com/sql-subquery.htm

其實重新閱讀你的問題聽起來更像你只需要添加到where子句的東西沿線,其中ID =「123ABC」

+0

我認爲如果我可以披露的信息數量有限,很難將我的問題說成適當的問題形式。無論如何,我正在迭代目錄和解析文件,然後在結果集上查找它們的記錄。這使你建議使用where子句不正確。 – lock 2010-11-05 07:51:21

2

只要做到這一點在SQL中!

所有你需要的是一個簡單的「ORDER BY ID」在你的SQL語句中。

在SQL中進行集合操作幾乎總是更有效率和更有效。要記住的關鍵是編寫查詢引擎的人比你或我更好的程序員,他們可能已經調整了SQL引擎的時間比你編程的要長。

0

您必須將完整的結果集複製到另一個數據結構中才能使用其「內容」。通常的方式是創建一個類,它可以容納一個單行的值(又名:豆):

class Data { 
    private String id; 
    private int passed; 
    private boolean flag; 
    private int type; // or an enum, if "types have names" 
    private int total; 
    public Data(){}; 
    // getters, setters for all fields 
} 

看了表後,創建一個集合,併爲每一行添加一個bean:

List<Data> result = new ArrayList<Data>(); 
while (rs.next()) { 
    Data data = new Data(); 
    data.setId(rs.getString(0)); 
    // .. 
} 

現在我們有一個集合,我們可以使用表的實際內容。


如果您想對數據進行篩選,只喜歡有一定的ID值讀取行,你應該考慮創建一個SQL SELECT命令,只是返回的行WHERE ID='MyID'值。