このコード例では、データベースから2つのレコードを取得しており、そのデータはというsmsDTO
オブジェクトに設定されています。もし私が最初のレコードの代わりに最後のレコードを2回印刷する別のクラスのこのArrayList
を反復すると、あなたは、SAMを挿入するループリスト内のユーザー定義オブジェクトが正しく反復されない
ながら、あなたはSmsDTO sms = new SmsDTO();
内部を作成する必要が
Databaseクラス
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());
}
}
ループが間違っているとは限りません。単純に 'SmsDTO 'のインスタンスを何度も繰り返して(' sms'は決して再割り当てされません)、その間にこのインスタンスを変更してください。したがって、 'List'には' SmsDTO'の同じインスタンスが 'x'倍だけ残されています。このインスタンスには、最後に反復されたデータベース行のデータがあります。 – SomeJavaGuy
あなたは正しいです –