在不为每个数据集创建新对象的情况下从结果集中填充列表<Object>
Populate List<Object> from ResultSet without creating new Object for each dataset
我一直使用以下代码将结果集中的对象添加到列表中。然而有人评论说,为 ResultSet 中的每个数据集创建一个新对象并不是很有效。有没有更好的办法?或者,是否有一种完全不同的方法可以将对象从结果集添加到列表?
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;
}
某人是对的,但付出了繁重的编码代价。并不是真的需要创建一个新对象。您始终可以使用相同的学生对象并使用设置为新值并添加到列表。对不起,我正要用不同的引用来处理同一个对象……!复制粘贴并错过在循环内添加代码!编辑是我的意思
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;
}
OP 上的评论几乎已经回答了你的问题,我将提供一些额外的见解。
您有一个 List
,其中包含 Students
个对象。您可以通过创建 Students
对象并将该对象添加到 List
来填充此 List
,以获取 rs
中的每个结果。如果你只制作了一个 Students
对象,你会怎么做?您必须创建与 rs
中的结果一样多的对象,才能完成您想要做的事情。这几乎是这些数据结构经常发生的事情,除非它是一个数组。
我一直使用以下代码将结果集中的对象添加到列表中。然而有人评论说,为 ResultSet 中的每个数据集创建一个新对象并不是很有效。有没有更好的办法?或者,是否有一种完全不同的方法可以将对象从结果集添加到列表?
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;
}
某人是对的,但付出了繁重的编码代价。并不是真的需要创建一个新对象。您始终可以使用相同的学生对象并使用设置为新值并添加到列表。对不起,我正要用不同的引用来处理同一个对象……!复制粘贴并错过在循环内添加代码!编辑是我的意思
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;
}
OP 上的评论几乎已经回答了你的问题,我将提供一些额外的见解。
您有一个 List
,其中包含 Students
个对象。您可以通过创建 Students
对象并将该对象添加到 List
来填充此 List
,以获取 rs
中的每个结果。如果你只制作了一个 Students
对象,你会怎么做?您必须创建与 rs
中的结果一样多的对象,才能完成您想要做的事情。这几乎是这些数据结构经常发生的事情,除非它是一个数组。