2014-10-28 161 views
0

我想使用while(rs.next())遍歷UserInfo表。 UserInfo表中有7條記錄,但我只有第一條記錄。在我加入rs.getRow();的代碼後,我得到了我想要的結果。結果集不能遍歷

try{ 
    Statement stmt=conn.createStatement(); 
    String queryStr="SELECT * FROM UserInfo"; 
    ResultSet rs=stmt.executeQuery(queryStr); 

    while(rs.next()) 
    { 
     String strName="Name is "+rs.getString(3)+";"; 
     String intAge="Age is "+rs.getInt(5)+";"; 
     String strCompany="Company is "+rs.getString(4)+".<br>"; 
     //int rowNum=rs.getRow(); 
     out.println(strName+intAge+strCompany); 
    } 

    out.println("Succeed in visiting UserInfo table."); 
    }catch(SQLException e){ 
     out.println("Failed to query."); 
    } 

我不想使用rs.getRow();。我應該如何處理這個問題?

+1

你確定你沒有在調試器中使用類似'rs.next()'的東西嗎?你的代碼應該沒問題。 – 2014-10-28 07:02:35

+2

您給出的代碼看起來很好,應該按照您的期望工作,除非它是數據庫級別的問題,但它看起來並不那樣 – Ironluca 2014-10-28 07:04:55

+0

問題是什麼?此代碼應該沒有任何問題,並得到你想要的 – 2014-10-28 07:47:52

回答

0

rs.next只告訴你是否有下一條記錄。

當您運行

ResultSet rs=stmt.executeQuery(queryStr); 

這已經從第一條記錄到變量rs地方的數據。

爲了推動你需要運行rs.getRow但前提是

下一條記錄(用rs.next檢查)下一條記錄。

+0

但我看過一些樣本,通過使用「rs.next()」,可以遍歷表。 – Chris 2014-10-28 07:35:51

0

rs.next()將光標從當前位置移動一行。結果集遊標最初位於第一行之前;下一個方法的第一個調用使第一行成爲當前行;

+0

謝謝。爲了解決我的問題,我該怎麼辦? – Chris 2014-10-28 07:33:01

1

你的代碼似乎沒有問題,除了String部分。如果你使用String來保存一條記錄,那麼你將無法顯示所有7條記錄。

因此,嘗試使用像ArrayList的集合對象。當然,你應該關閉連接終止。

try{ 
    Statement stmt=conn.createStatement(); 
    String queryStr="SELECT * FROM UserInfo"; 
    ResultSet rs=stmt.executeQuery(queryStr); 
    List<String> list = new ArrayList<String>(); 

    while(rs.next()){ 

    list.add(rs.getString(3)); 

    } 

System.out.println("rows "+list.size()); 
}catch(SQLException e){ 
    out.println("exception "+e.getMessage()); 
} 
finally{ 
rs.close(); 
stmt.close(); 
conn.close(); 
} 

這是如何使用集合對象從數據庫中檢索值的好例子。 http://theopentutorials.com/tutorials/java/jdbc/how-to-retrieve-all-rows-from-mysql-table-using-jdbc/

+0

非常感謝您的幫助。這些教程對我來說非常有用。再次感謝。 – Chris 2014-10-28 09:02:27