2017-08-12 51 views
0

藉口: 開始我想告訴你,我不是一個專家級的java程序員,也不知道arrayLists和迭代的所有細節。到目前爲止,我已經走過了一段很長的路,但我不知道我的問題,因爲我對Java中的Lists很少有經驗。java - arraylist迭代,不打印出第一行

問題: 我試圖把我的SQL查詢結果(結果集(我想這也是一個數組列表,所以IM可能使用它不需要雙數組列表))到ArrayList中,之後,我嘗試將每行打印到控制檯中,但遇到第一行未打印的問題。

解決方案: 我很好,只要下面有兩種情況:1.將導致正常陣列(所以沒有ArrayList中),這使得它更容易爲我,因爲我知道如何處理數組。 2.你們能告訴我爲什麼第一行不會被打印

我的數據庫: 我有兩個colums,第一個是主鍵(ID),第二個是一個命令(字符串( VARCHAR)我想,一旦我得到它來執行

我的代碼:

public List<String> getCommands(){ 

    String sql = "SELECT * FROM query"; 
    try { 
     PreparedStatement stmt = CONNECTION.prepareStatement(sql); 
     ResultSet results = stmt.executeQuery(); 

     if (results.next()) { 

      List<String> row = new ArrayList<String>(); 
      while(results.next()) { 
       row.add(results.getString(2)); 
      } 

      return row; 

     } else { 
      return null; 
     } 

    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
    return null; 

} 

List<String> results = SQL.getCommands(); 

if(results != null){ 
    getLogger().info("Found at least 1 command"); 

    for (Iterator<String> i = results.iterator(); i.hasNext();) { 
     String row = i.next(); 
     getLogger().info("command: " + row); 
    } 

}else{ 
    getLogger().info("Can't find commands"); 
} 

我的輸出:它打印一切exept在數據庫中的第一行

+0

您正在調用'results.next()'兩次,因此它跳過第一行。你應該刪除'if'子句。 – tima

+0

這不是'arraylist迭代'。 – saka1029

回答

0

在將結果添加到列表中之前,您需要調用results.next()兩次。刪除if (results.next()) {聲明,一切都應該沒問題。

next()必須一次訪問的第一行之前被調用,但你兩次調用它(在if並在while聲明),所以光標已經在第二排,當你開始閱讀的內容行。

+0

這解決了這個問題,非常感謝。你有什麼想法我可以檢查是否沒有行返回null? – user3645480

+0

最好是空保存並返回一個空列表以防止空檢查和空指針異常。但是,如果你想要你的空結果,你可以在while循環中添加元素後檢查你的list.isEmpty()。如果列表爲空,則沒有返回的結果,然後可以返回null而不是列表。 – Simulant

+0

@ user3645480'.next()'根據結果集中是否有更多行或當前最後一行返回true或false。 – wdc

1

看看ResultSet::next,它說:

將光標從它的當前位置移動一行。結果集遊標最初位於第一行之前;下一個方法的第一個調用使第一行成爲當前行;第二次調用使第二行成爲當前行,依此類推。

當你這樣做while循環if (results.next())之前,結果的第一行被跳過。

0

當您檢查if (results.next())results.next()實際上被調用時,所以指向行的指針指向結果集的第一個元素。當你到達while(results.next())時,next()被再次調用並指向第二個元素,所以你可以刪除if(resultset.next())

+1

謝謝,你的回答非常有幫助! – user3645480