在这个示例代码中,我从数据库中获取两条记录,然后将我设置为smsDTO
的数据设置为ArrayList
。如果我在另一个上次记录打印两次而不是第一次记录的类中迭代此ArrayList
。
数据库类
public ArrayList<SmsDTO> getReulst() {
ResultSet rs = null;
Connection conn = null;
PreparedStatement pstmt = null;
ArrayList<SmsDTO> ar=new ArrayList<SmsDTO>() ;
SmsDTO sms = new SmsDTO();
try {
conn = getConnection();
String query = "select pt.P_MOBILE,st.S_FIRSTNAME,st.REF_ID from parent_info pt join student_info st on pt.REF_ID = st.REF_ID where st.S_CLASS_TO_JOIN = 10;";
pstmt = conn.prepareStatement(query); // create a statement
rs = pstmt.executeQuery();
// extract data from the ResultSet
while (rs.next()) {
long phone = rs.getLong(1);
sms.setPhone(phone);
String student_name = rs.getString(2);
sms.setStudentname(student_name);
String ref = rs.getString(3);
sms.setRef(ref);
ar.add(sms);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
rs.close();
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return ar;
}
}
另一个班级
method()
{
ArrayList<SmsDTO> lhst = null;
try {
lhst = db.getReulst();
for (Iterator iterator = lhst.iterator(); iterator.hasNext();) {
SmsDTO smsDTO = (SmsDTO) iterator.next();
System.out.println(smsDTO.getStudentname());
}
}
答案 0 :(得分:0)
public ArrayList<SmsDTO> getReulst() {
ResultSet rs = null;
Connection conn = null;
PreparedStatement pstmt = null;
ArrayList<SmsDTO> ar = new ArrayList<SmsDTO>();
SmsDTO sms = null;
try {
conn = getConnection();
String query = "select pt.P_MOBILE,st.S_FIRSTNAME,st.REF_ID from parent_info pt join student_info st on pt.REF_ID = st.REF_ID where st.S_CLASS_TO_JOIN = 10;";
pstmt = conn.prepareStatement(query); // create a statement
rs = pstmt.executeQuery();
// extract data from the ResultSet
while (rs.next()) {
sms = new SmsDTO();
long phone = rs.getLong(1);
sms.setPhone(phone);
String student_name = rs.getString(2);
sms.setStudentname(student_name);
String ref = rs.getString(3);
sms.setRef(ref);
ar.add(sms);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
rs.close();
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return ar;
}
}
答案 1 :(得分:0)
你必须在while循环中创建SmsDTO sms = new SmsDTO();
您将相同的对象插入到数组列表中两次。因此,最后更新的值将存在于同一对象中(因为它的引用相同)。
在while循环中创建新对象时,第一个记录将转到第一个对象,第二个记录将转到新创建的第二个对象。 (不是同一个对象)。