<Object> 从结果集中填充列表,而不为每个数据集创建新对象



我一直在使用以下代码将 ResultsSet 中的对象添加到列表中。但是,有人评论说,为结果集中的每个数据集创建一个新对象不是很有效。有没有更好的方法?或者,是否有一种完全不同的方法可以将对象从结果集添加到列表中?

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;
}

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

您有一个包含Students对象的List。您可以通过创建一个 Students 对象并将该对象添加到 rs 中的每个结果的List来填充此List。如果你只是做了一个Students对象,你会怎么做?你必须制作尽可能多的对象,因为rs的结果,才能做你想做的事情。这几乎是这些数据结构经常发生的情况,除非它是一个数组。

某人

是对的,但要付出一些繁重的编码代价。实际上并不需要创建一个新对象。您始终可以使用相同的学生对象,并使用设置为新值和添加到列表。对不起,我即将使用不同的引用来相同的对象....!复制粘贴和错过以在循环中添加代码!编辑是我的意思

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;
}

相关内容

  • 没有找到相关文章

最新更新