我正在编写代码来实现库存模型。作为其中的一部分,我必须从数据库获取项目并设置项目的属性并将该项目对象添加到列表中,在列表上执行一些功能。数据库中有三个表,每个表包含3行。但问题是,只有最后一个表中的最后一行才会被插入九次。 请帮我查一下代码中的问题所在。 方法readAllItemsFromDb必须执行上面提到的任务并返回Item对象的列表。 Item类包含id,description,weight,price,manufacturingDate,useBeforeMonths及其set和get方法等字段。
我的方法代码如下 -
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 :(得分:0)
您必须在while循环的每次迭代开始时创建一个新的Item对象。
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);
}
答案 1 :(得分:0)
这是因为您始终使用相同的Item对象,您需要为每个new Item()
调用创建rs.next()
。
答案 2 :(得分:0)
你只有一个对象Item 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);
}