2014-10-30 73 views
0

我對基於ResultSet創建的對象有疑問。基於結果集創建對象

比方說,我有一個產品DAO類:

public class ProductDAO 
{  
    ... 
    ResultSet products = statement.executeQuery("SELECT * FROM PRODUCT "); 

    if (products .next()) { 
     int prodId = products .getInt("id");   
     String prodName = products .getString("name");  
     Product product = new Product(prodId, prodName);  
    }   
    ... 
} 

比方說,SQL查詢返回5行。結果,產品對象最終會包含什麼?它是否只包含最終返回行的值(在本例中是第5行)?

+0

然後用'while'循環('而( products.next())')將數據庫中的數據檢索到對象中。 – 2014-10-30 07:56:49

回答

2

如果您的查詢獲取多個行,您應該有一個循環並創建多個Product實例。您當前的代碼只會讀取第一行並創建單個產品實例。

這裏有一個更好的實現,將加載查詢返回的所有數據:您需要創建的`object` Product`類的`陣列

List<Product> productList = new ArrayList<Product>(); 
while (products.next()) { 
    int prodId = products .getInt("id");   
    String prodName = products .getString("name");  

    Product product = new Product(prodId, prodName);  
    productList.add(product); 
} 
+0

感謝Eran,我也以同樣的方式感受到了,但爲什麼你會從第一行開始說一個產品實例呢?它不應該是最後一排嗎?因爲我認爲'next'方法會遍歷,直到最後一行返回,並且基於最後一行創建Product實例。我不知道我是否正確,我的意思是爲每行創建一個Product的Product實例,只有在循環的下一次迭代時纔會'over',直到達到最後一行。 – Sor 2014-10-30 07:58:37

+0

@Sor既然你只調用一次next()方法,它會使ResultSet指向第一個返回的行。每次調用next()都會將ResultSet移動到下一行。你的代碼中沒有循環。你有一個if語句。我建議的代碼有一個循環。如果你有一個循環,產品參考將在每次迭代中被覆蓋。 – Eran 2014-10-30 08:04:51