2012-03-16 50 views
-1

我已經使用JDBC執行查詢並遍歷結果集我已經將所有字段存儲在List中的java中。Iterartor - 如何遍歷特定記錄

List<String> dataList=new ArrayList<String>(); 
     while(res.next()) 
     { 
      dataList.add(res.getString(1)); 
      dataList.add(res.getString(2)); 
      dataList.add(res.getString(3)); 
      dataList.add(res.getString(4)); 
      dataList.add(res.getString(5)); 
      dataList.add(res.getString(6)); 
      dataList.add(res.getString(7)); 
     } 
     Iterator<String> it= dataList.iterator(); 

由於我直接添加到列表中,因此如何在遍歷迭代器時獲取這7個字段。 方式:

while(it.hasNext()) 
{ 
    String f1=it.next(); 

} 

就像聰明,每次我想在 同時 和明年7 7場,未來7 .......所以使用這個while循環我怎樣才能得到這7場(一個一次在有7個場的表中排)。

我在這裏有點混淆。請幫幫我。

感謝

回答

1

你想要做的實際上是創建一個存儲值的所有七個另一個目標是什麼。

然後創建這些條目的列表,以便您可以一次訪問一行,這是我認爲您所要求的。

首先爲該行創建一個類。

private static class Entry { 
    String[] row; 

    public Entry (ResultSet r) { 
     row = new String [ 7 ]; 
     for (int i = 1; i <= 7; i++) { 
      row[i] = r.getString(i); 
     } 
    } 
} 

使用它,您可以創建一個Entry對象列表。

List<Entry> entryList = new ArrayList <Entry>(); 

while(res.next()) 
{ 
    entryList.add (new Entry (res)); 
} 

然後,您可以繼續並通過entryList循環並獲取您想要的任何特定條目。

當然,如果您有特定的值,則可以明智地創建類型爲String的實例變量,而不是字符串數組。

我的意思是,你可以這樣做:

private static class Entry { 
    String column1; // rather than name column1 use what the column semantically represents 

    String column2; 

    // ... 

    public Entry (ResultSet r) { 
     column1 = r.getString(1); 
     // ... 
    } 

這樣,你也可以像調用爲r.getInt(i)具有String以外的不同類型的某些列。

祝你好運!

1

我覺得你的表聲明應該是

List<Any DAO Object> instead of List<String> 

雖然從結果集讀取,創建一個DAO對象,添加所有讀入數據到該對象,然後添加對象到列表中。

然後,您可以在每次迭代中迭代並獲取每個DAO對象。

+0

這很有道理!我沒有意識到你,我其實也是這麼說的。也許我不應該發佈... – 2012-03-16 06:32:52

+0

@Kaushik有時會發生。你有這個問題,那就夠了。 – 2012-03-16 06:35:24

0

您可以使用DatabaseMetaData的類,

private static final String DRIVER = "com.mysql.jdbc.Driver"; 

    private static final String URL = "jdbc:mysql://localhost/testdb"; 

    private static final String USERNAME = "root"; 

    private static final String PASSWORD = ""; 

    public static void main(String[] args) throws Exception { 
    Class.forName(DRIVER); 
    Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD); 

    DatabaseMetaData metadata = connection.getMetaData(); 
    ResultSet resultSet = metadata.getColumns(null, null, "users", null); 
    while (resultSet.next()) { 
     String name = resultSet.getString("COLUMN_NAME"); 
     String type = resultSet.getString("TYPE_NAME"); 
     int size = resultSet.getInt("COLUMN_SIZE"); 

     System.out.println("Column name: [" + name + "]; type: [" + type + "]; size: [" + size + "]"); 
    } 
    connection.close(); 
    }