关于resultset读取和arraylist保存的问题

    String sql ="select * from shop_something ";
    ResultSet re = db.query(sql);
    ResultSetMetaData md =re.getMetaData();
    dish some= new dish();
    ArrayList<dish> list= new ArrayList();
    while(re.next())
    {
        some.setId(re.getString("id"));
        some.setCatelog_id(re.getString("Catelog_id"));
        some.setDescribe(re.getString("describe"));
        some.setImge(re.getString("image"));
        some.setName(re.getString("name"));
        some.setPrice(re.getFloat("price"));
        some.setSupplier(re.getString("supplier"));
        list.add(some);
    }

    for(dish ds:list)
    {
        System.out.print("   "+ds.getId()+"hello");
    }


    有两个对象 对象里分别有id11 和id22 两个属性
    以上代码 使用 for each 输出的结果 只有两个id22  
    这是为什么  
    另外有没有更好 的方法来访问数据库并封装到list表中? 使用反射的话可以详细讲解吗? 谢谢!

输出2个id22的原因是:你只创建了一个dish对象。而list中保存dish,保存的是该对象的引用。

想正确存储,你可以讲代码

  dish some= new dish();

放到

 while(re.next())

这个while循环的里面。

至于较好的方法,随便进个公司,都会有封装好的现成的方法吧,不仅要保存数据,还要保存字段名称、字段类型等。

支持楼上的回答;
ResultSet这是Java语言的吧?被框架封装的我看到这个都感觉很陌生。

如果你有使用spring,直接使用jdbc template,可以直接属性映射

一楼的说法是对的,至于DAO的封装,Hibernate,Mybatis都是不错的选择