- - PR -
ArrayListの使い方につきまして
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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しか取得できません。 どこかやはり使い方が間違えているのでしょうか・・・ ご教授よろしくお願い致します。 |
|
投稿日時: 2006-03-03 10:46
detaillistの0番目と1番目に、同じオブジェクトが入っています。
|
|
投稿日時: 2006-03-03 10:48
detaillist.add(i,resultmap);
|
|
投稿日時: 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);で行っても同じ結果でした。 よろしければもう少し詳しくご指摘頂きたいです。 ご教授よろしくお願い致します。 |
|
投稿日時: 2006-03-03 11:17
resultmap.put(CommonConst.EMPLOYEE_CODE,(String)rs.getString("EMPLOYEE_CODE"));
この前 resultmap = new HashMap(); を追加したら大丈夫だと思います。 Javaの値はアドレスであげるから、初期化しないとだめです。 |
|
投稿日時: 2006-03-03 11:34
参照型とかプリミティブ型の違いを勉強しよう。
o2 = o1 で『クローンが出来た』ことにしている後輩がいて萎えたことを思い出した。 |
|
投稿日時: 2006-03-03 11:35
resultmapの中身をいくら入れ替えたところで、
resultmapそのものは変わらない、ということです。 試しに、結果を表示しているロジックの次に、 resultmapの中身を変更するロジックを追加して、 改めて結果を表示してみてください。 複数のresultmapを使いたいのなら、 その都度、新しいresultmapのインスタンスを生成する必要があります。 |
|
投稿日時: 2006-03-03 12:09
Pinetreeさん返信ありがとうございます。
ちゃんとできました。 もう少しでようやく |