- PR -

ArrayListからget()で値を取り出す際に、同じ値しか取れない問題。

1
投稿者投稿内容
sakinuma
会議室デビュー日: 2005/08/12
投稿数: 6
投稿日時: 2005-09-26 18:24
こんにちは。

データベースアクセスの練習中にコレクションを使ってみることにしたのですが、
どうもうまくいきませんので、教えてもらいたいと思い載せました。
データベース接続は出来ていますので、その部分は省きます。


例えばArrayListを使う場合。
以下はデータベースから取得したものを、date1に入れているところです。

ArrayList objary = new ArrayList;
private ResultSet rs = null;

while(rs.next()){
Date date1 = rs.getDate("date1");
     objary.add(date1);
  }

//以下は配列の中身を書き出しているところです。

for(i = 0;i < objary.size();i++){
Date ids = (Date) objary.get(i);
System.out.println(ids);
}

結果 2005-09-22
2008-03-21
といった具合に、ちゃんと違った値が取れています。
しかし、一度データ保存用のJavaBeanに入れて、それをadd()した場合、get()で取り出した場合、
上書きされてしまいます。

以下は、うまくいかない例です。

ArrayList objary = new ArrayList;
private ResultSet rs = null;

DataBean bean = new DataBean();

//DataBeanは、date1の変数とgetter,setterメソッドを持ち合わせています。

while(rs.next()){
Date date1 = rs.getDate("date1");
bean.setDate1(date1);

     objary.add(date1);
  }

//そして先ほどと同じように、Listの中身を取り出し、さらに取り出したBeanから値を取り出します。
for(i = 0;i < objary.size();i++){
DataBean bean2 = (DataBean) objary.get(i);
Date gdate1 = bean2.getDate1();

System.out.println(gdate1);
}

結果 2008-03-21
2008-03-21

となり、すべて最後の値となってしまいます。

もしかしたらadd()で追加する変数名が同じせいで、
『上書きされているのかも』とも思いましたが、上のうまく言っているやつも、同じ変数名です。また参考書でも、このような形で書いています。

なぜうまくいかないのか、原因は何なのでしょうか?
ご意見をお待ちしています。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-09-26 18:29
add している DataBean のインスタンスが同じだからではないでしょうか?
ループの中で毎回 new するようにしましょう。
sakinuma
会議室デビュー日: 2005/08/12
投稿数: 6
投稿日時: 2005-09-26 18:49
大変にありがとうございます。
そうですね。変数名云々ではなく、オブジェクトが同じかが問題なのですね。
ありがとうございます。

1

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