2012-12-31 79 views
1

我在表中有很多行,我在我的數據庫上運行了相同的查詢,這是MySql,但java ResultSet只是給出表的第一行。這是我的代碼。雖然表中有很多行,但JDBC ResultSet只給出一行?

public ArrayList<String> getAllAlbumsName(Integer uid) { 
    ArrayList<String>allAlbumsName = new ArrayList<String>(); 
    try { 
     String qstring = "SELECT albumname FROM picvik_picture_album WHERE " + 
       "uid = '" + uid + "';"; 

     System.out.println(qstring); 
     connection = com.picvik.util.MySqlConnection.getInstance().getConnection(); 
     ptmt = connection.prepareStatement(qstring); 
     resultSet = ptmt.executeQuery(); 
     if(resultSet.next()) { 
      System.out.println(resultSet.getString("albumname")); 
      allAlbumsName.add(resultSet.getString("albumname")); 
     } 

     resultSet.close(); 
     ptmt.close(); 
     connection.close(); 


    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return allAlbumsName; 
} 
+2

這將是相當困難得到的東西多於一個沒有環。 –

+0

SQL注入警報! – BalusC

+0

@Brian你總是可以手動「展開」所有的循環。 –

回答

11
if(resultSet.next()) { 
      System.out.println(resultSet.getString("albumname")); 
      allAlbumsName.add(resultSet.getString("albumname")); 
     } 

如果你想獲得的所有行,它應該是:

while(resultSet.next()) { 
     System.out.println(resultSet.getString("albumname")); 
     allAlbumsName.add(resultSet.getString("albumname")); 
    } 

而特定條件爲真

while語句連續執行語句塊:由於@BalusC評論說,你的代碼會引入SQL注入攻擊,所以最好使用ptmt.set ...而不是手動構建SQL字符串。

1

變化if (resultSet.next()) {while (resultSet.next()) {

2

嘗試while(resultSet.next()) {

,而不是if (resultSet.next()) {

相關問題