从ResultSet填充List <object>,而不为每个数据集创建新的Object

时间:2017-05-26 07:39:41

标签: java list jdbc resultset

我一直使用以下代码将ResultSet中的对象添加到List中。然而有人评论说,为ResultSet中的每个数据集创建一个新的Object效率不高。有没有更好的办法?或者,是否有一种完全不同的方法将ResultSet中的Object添加到List?

public static List<Students> selectFromDatabase(Connection conn, Statement stmt){
    List<Students> list = new ArrayList<Students>();
    String select = "SELECT * FROM students";
    ResultSet rs = null;

    try{
        stmt = conn.createStatement();
        rs = stmt.executeQuery(select);

        while(rs.next()){
            //you have to create a new OBJECT FOR EACH LOOP
            Students student = new Students();
            student.setStudentId(rs.getInt(1));
            student.setName(rs.getString(2));
            student.setGpa(rs.getInt(3));
            list.add(student);
        }               
    }catch(SQLException e){
        System.out.println(e.getMessage());
    }       
    return list;
}

2 个答案:

答案 0 :(得分:1)

您对OP的评论几乎已经回答了您的问题,我只是提供一些额外的见解。

您的List包含Students个对象。您可以通过创建List对象并将该对象添加到Students来为List中的每个结果填充此rs。如果你刚刚制作了一个Students对象,你会怎么做呢?您必须制作与rs中的结果一样多的对象才能完成您尝试做的事情。这几乎是这些数据结构所发生的事情,除非它是一个数组。

答案 1 :(得分:-1)

某人是正确的代价是重编码。实际上并不需要创建新对象。您始终可以使用相同的学生对象,并将set设置为新值并添加到列表中。对不起,我正准备使用不同的参考文件....!复制粘贴和错过,在循环内添加代码!编辑的是我的意思

public static List<Students> selectFromDatabase(Connection conn, Statement stmt){
    List<Students> list = new ArrayList<Students>();
    String select = "SELECT * FROM students";
    ResultSet rs = null;

    try{
        stmt = conn.createStatement();
        rs = stmt.executeQuery(select);
        Students student = null;
        while(rs.next()){
                student = new Students();
            //you have to create a new OBJECT FOR EACH LOOP            
            student.setStudentId(rs.getInt(1));
            student.setName(rs.getString(2));
            student.setGpa(rs.getInt(3));
            list.add(student);
        }               
    }catch(SQLException e){
        System.out.println(e.getMessage());
    }       
    return list;
}