- PR -

ArrayListの使い方につきまして

投稿者投稿内容
ポン
ベテラン
会議室デビュー日: 2006/02/15
投稿数: 98
投稿日時: 2006-03-03 10:37
お世話になっております。
ArrayListでどうしても解決できません事があります。
ソースは下記です。
////////////////////////////////////////////////////////////////
PreparedStatement ps = null;
ResultSet rs = null;
HashMap resultmap = new HashMap();
String strSQL=null;
int i=0;

public void PersonChangeListChangeTbl
(Connection con, HashMap headmap, ArrayList detaillist) {

strSQL = null;
strSQL="SELECT * from CHANGE_TBL where CHENGE_DATE = "+ "'" + (String)headmap.get("Date") + "'";
System.out.println("開始");
System.out.println(strSQL);
System.out.println((String)headmap.get("Date"));
try {
ps = con.prepareStatement(strSQL);
rs = ps.executeQuery();
while(rs.next()){
resultmap.put(CommonConst.EMPLOYEE_CODE,(String)rs.getString("EMPLOYEE_CODE"));
resultmap.put(CommonConst.REAZON, (String)rs.getString("REAZON"));
resultmap.put(CommonConst.CHENGE_DATE,(String)rs.getString("CHENGE_DATE"));//
System.out.println("社員コード:"+resultmap.get(CommonConst.EMPLOYEE_CODE));
detaillist.add(i,resultmap);
System.out.println("i++:"+i);
i++;
}
HashMap karilist = (HashMap)detaillist.get(0);
System.out.println("仮リスト"+karilist.get(CommonConst.EMPLOYEE_CODE));

} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (ps != null) {
ps.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

///////////////結果////////////
開始
SELECT * from CHANGE_TBL where CHENGE_DATE = '20060202'
20060202
コード:10001
i++:0
コード:10003
i++:1
仮リスト10003

となります。karilistで最初のコード10001を取得したいのですが
どうしても10003しか取得できません。
どこかやはり使い方が間違えているのでしょうか・・・
ご教授よろしくお願い致します。

スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2006-03-03 10:46
detaillistの0番目と1番目に、同じオブジェクトが入っています。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-03-03 10:48
detaillist.add(i,resultmap);
ポン
ベテラン
会議室デビュー日: 2006/02/15
投稿数: 98
投稿日時: 2006-03-03 11:00
スフレさん、ぶさいくろうさん返信ありがとうございます。
自分も同じオブジェクトが入っていると思っておりましたが・・・

どうしてこのソースで同じオブジェクトが入るのでしょうか?
i=0の時detaillist.add(0,resultmap);に挿入
i=1の時detaillist.add(1,resultmap);に挿入

detaillist.get(0)で(0,resultmap);を取得
karilistで1件目のコード取得 と思っておりました。

さきほどiを取り外し
detaillist.add(resultmap);で行っても同じ結果でした。

よろしければもう少し詳しくご指摘頂きたいです。
ご教授よろしくお願い致します。
Pinetree
会議室デビュー日: 2006/03/03
投稿数: 1
投稿日時: 2006-03-03 11:17
resultmap.put(CommonConst.EMPLOYEE_CODE,(String)rs.getString("EMPLOYEE_CODE"));
この前 resultmap = new HashMap();
を追加したら大丈夫だと思います。
Javaの値はアドレスであげるから、初期化しないとだめです。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-03-03 11:34
参照型とかプリミティブ型の違いを勉強しよう。
o2 = o1 で『クローンが出来た』ことにしている後輩がいて萎えたことを思い出した。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2006-03-03 11:35
resultmapの中身をいくら入れ替えたところで、
resultmapそのものは変わらない、ということです。
試しに、結果を表示しているロジックの次に、
resultmapの中身を変更するロジックを追加して、
改めて結果を表示してみてください。

複数のresultmapを使いたいのなら、
その都度、新しいresultmapのインスタンスを生成する必要があります。
ポン
ベテラン
会議室デビュー日: 2006/02/15
投稿数: 98
投稿日時: 2006-03-03 12:09
Pinetreeさん返信ありがとうございます。
ちゃんとできました。

もう少しでようやく

スキルアップ/キャリアアップ(JOB@IT)