In diesem Beispielcode erhalte ich zwei Datensätze aus der Datenbank, dann die Daten, die ich auf smsDTO
Objekt gesetzt habe, das ich ArrayList
gesetzt hatte. wenn ich diese ArrayList
in einer anderen Klasse wiederholen, die das letzte Drucken zweimal statt des ersten Datensatzes aufzeichnet.Benutzerdefiniertes Objekt in der Liste wurde nicht richtig iteriert
Database-Klasse
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;
}
}
Eine andere Klasse
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());
}
}
Es ist nicht so, dass es eine falsche Schleife gibt, Sie fügen die Instanz von SmsDTO einfach immer wieder hinzu (sms wird nie neu zugewiesen) und ändert diese Instanz in der Zwischenzeit. Sie haben also 'x' die gleiche Instanz von' SmsDTO' in der 'List', wo diese eine Instanz die Daten der letzten iterierten Datenbankzeile enthält. – SomeJavaGuy
ya du hast Recht –