while(rs.next()){
Object obj = entityClass.newInstance();//获得实体类实例
for(int i=1;i<rsmd.getColumnCount();i++){
String columnName = rsmd.getColumnName(i);
Field field = entityClass.getDeclaredField(columnName);//获得实体类字段
field.setAccessible(true);//准入标志设置
field.set(obj, rs.getObject(columnName));//字段设置值
}
这样做要求实体类的字段名称和数据库中的一样才行,估计这是自己编的框架? 要是想用标注中的名字,也是可以修改的

解决方案 »

  1.   

                while (rs.next())
                {
                    //entityClass是传过来的一个具体的Class,例如Student.class。调用其默认构造方法
                    Object obj = entityClass.newInstance();
                    //循环表的列名,将一条数据的每个列的数据封装到object中
                    for (int i = 1; i < rsmd.getColumnCount(); i++)
                    {
                        //这个是从数据库取出来的列名
                        String columnName = rsmd.getColumnName(i);
                        //根据属性名,获取具体属性信息(数据库表的列名定义的与类的属性名一致)
                        Field field = entityClass.getDeclaredField(columnName);
                        //设置此字段可访问(例如,原先定义可能为private的属性,set为true,就可以通过a.name的形式访问了)
                        field.setAccessible(true);
                        //将数据库中,列对应的值,设置到对象相应的属性中
                        field.set(obj, rs.getObject(columnName));
                    }
                    //将封装好的这个object对象放入列表中
                    data.add(obj);
                }另外,for (int i = 1; i < rsmd.getColumnCount(); i++)这一行可能有问题(最后一列没处理到),建议改成for (int i = 1; i <= rsmd.getColumnCount(); i++)