2015-05-22 64 views
0

我正在編寫代碼以實施庫存模型。作爲其中的一部分,我必須從數據庫獲取Items並設置Item的屬性,並將該Item對象添加到列表中,並在列表中執行少量功能。數據庫中有三個表格,每個表格都包含3行。但問題是隻有最後一張表中的最後一行被插入全部九次。 請幫我看看問題出在哪裏。 readAllItemsFromDb方法必須完成上面提到的任務,並返回一個Item對象列表。 Item類包含id,description,weight,price,manufacturingDate,useBeforeMonths等字段以及它們的set和get方法。無法從Java中的數據庫中讀取表中的行

我的方法的代碼是follows--

public List<Item> readAllItemsFromDb() { 
    // TODO Auto-generated method stub 
    List<Item> list=new ArrayList<Item>(); 
    Item item=new Item(); 
    Milk milk=new Milk(); 
    Cheese cheese=new Cheese(); 
    Wheat wheat=new Wheat(); 

    String cheese_type=new String(); 
    String milk_type=new String(); 
    String wheat_type=new String(); 
    String ingred_cheese=new String(); 

    String cheese_query="select id,description,weight,price,mfg_date,UseBeforeInMonths from cheese_tbl;"; 
    String milk_query="select id,description,weight,price,mfg_date,UseBeforeInMonths from milk_tbl;"; 
    String wheat_query="select id,description,weight,price,mfg_date,UseBeforeInMonths from wheat_tbl;"; 

    try { 
     con=dcm.getConnection();//Theres' no problem with Connection 
     st=con.createStatement(); 
     rs=st.executeQuery(cheese_query); 
     while(rs.next()){ 
      item.setId(rs.getInt(1)); 
      item.setDescription(rs.getString(2)); 
      item.setWeight(rs.getFloat(3)); 
      item.setPrice(rs.getFloat(4)); 
      item.setManufacturingDate(rs.getDate(5)); 
      item.setUseBeforeMonths(rs.getInt(6)); 

      list.add(item); 
     } 

     rs=st.executeQuery(milk_query); 
     while(rs.next()){ 
      item.setId(rs.getInt(1)); 
      item.setDescription(rs.getString(2)); 
      item.setWeight(rs.getFloat(3)); 
      item.setPrice(rs.getFloat(4)); 
      item.setManufacturingDate(rs.getDate(5)); 
      item.setUseBeforeMonths(rs.getInt(6)); 
      list.add(item); 

     } 

     rs=st.executeQuery(wheat_query); 
     while(rs.next()){ 
      item.setId(rs.getInt(1)); 
      item.setDescription(rs.getString(2)); 
      item.setWeight(rs.getFloat(3)); 
      item.setPrice(rs.getFloat(4)); 
      item.setManufacturingDate(rs.getDate(5)); 
      item.setUseBeforeMonths(rs.getInt(6)); 

      list.add(item); 
     } 


    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
    return list; 
} 

回答

0

您的while循環(一個或多個)創建在每次迭代的一個新項目入手的對象。

while(rs.next()){ 
     item = new Item(); 
     item.setId(rs.getInt(1)); 
     item.setDescription(rs.getString(2)); 
     item.setWeight(rs.getFloat(3)); 
     item.setPrice(rs.getFloat(4)); 
     item.setManufacturingDate(rs.getDate(5)); 
     item.setUseBeforeMonths(rs.getInt(6)); 

     list.add(item); 
    } 

    rs=st.executeQuery(milk_query); 
    while(rs.next()){ 
     item = new Item(); 
     item.setId(rs.getInt(1)); 
     item.setDescription(rs.getString(2)); 
     item.setWeight(rs.getFloat(3)); 
     item.setPrice(rs.getFloat(4)); 
     item.setManufacturingDate(rs.getDate(5)); 
     item.setUseBeforeMonths(rs.getInt(6)); 

     list.add(item); 
    } 

    rs=st.executeQuery(wheat_query); 
    while(rs.next()){ 
     item = new Item(); 
     item.setId(rs.getInt(1)); 
     item.setDescription(rs.getString(2)); 
     item.setWeight(rs.getFloat(3)); 
     item.setPrice(rs.getFloat(4)); 
     item.setManufacturingDate(rs.getDate(5)); 
     item.setUseBeforeMonths(rs.getInt(6)); 

     list.add(item); 
    } 
0

這是因爲你總是使用同一個項目的對象,你需要爲每個rs.next()調用創建new Item()

0

您只有一個對象Item item = new Item()的實例;在功能的開始,然後在每個使用相同的對象項目。在每個while循環迭代中,您需要創建將添加到列表中的新對象實例;

while(rs.next()){ 
     item = new Item(); //this one 
     item.setId(rs.getInt(1)); 
     item.setDescription(rs.getString(2)); 
     item.setWeight(rs.getFloat(3)); 
     item.setPrice(rs.getFloat(4)); 
     item.setManufacturingDate(rs.getDate(5)); 
     item.setUseBeforeMonths(rs.getInt(6)); 

     list.add(item); 
    }