前提・実現したいこと
いつもお世話になっております。
現在、Javaで開発を行っているのですが、下記問題が発生しており困っております。
Dbaccess.javaクラスで1レコードを配列の0番目に2レコードを配列の1番目に格納...という風に動作させたいのですが、
現在では、2レコード目を格納しようとすると1番目に格納されるのですが、0番目のレコードにも追加されてしまいます。
この場合、どうしたら0番目に追加されずに1番目だけに値が入るようになりますでしょうか?
対象行:while(rset.next()) ~ userInfDto.setUserInformationList(list);
■下記、実際の配列の値になります。
※レコードが追加される度にすべてのインデックスに追加されてしまいます。
1レコード(最初):1, aaa ~
2レコード(最初):2, bbb ~
3レコード(最初):3, ccc ~
[[1, aaa, 2018-01-10, 2019-02-20, 1, null, 2, bbb, 2019-10-10, 2019-10-20, 2, null, 3, ccc, 2019-08-10, 2019-09-20, 3, null],
[1, aaa, 2018-01-10, 2019-02-20, 1, null, 2, bbb, 2019-10-10, 2019-10-20, 2, null, 3, ccc, 2019-08-10, 2019-09-20, 3, null],
[1, aaa, 2018-01-10, 2019-02-20, 1, null, 2, bbb, 2019-10-10, 2019-10-20, 2, null, 3, ccc, 2019-08-10, 2019-09-20, 3, null]]
どなたかご教授お願い致します。
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
java
1public class Dbaccess extends Userinformationdto{ 2 3 DataSource ds; 4 5 public Dbaccess() throws ServletException { 6 try { 7 InitialContext ic = new InitialContext(); 8 ds = (DataSource)ic.lookup("java:/comp/env/jdbc/SQLServer"); 9 10 } catch(Exception e) { 11 12 } 13 } 14 15 public Userinformationdto Confimation(String user, int psw , Userinformationdto userInfDto) { 16 17 Connection con = null; 18 PreparedStatement pstmt = null; 19 ResultSet rset = null; 20 21 try { 22 con = ds.getConnection(); 23 if (user != null && psw != 0) { 24 25 StringBuffer sql = new StringBuffer(); 26 27 sql.append("select user_id, user_name, user_password from user_table where user_name='" + user +"'" + "and user_password=" + psw ); 28 29 // sql文実行準備 30 pstmt = con.prepareStatement(new String(sql)); 31 32 // sql文実行 33 pstmt.execute(); 34 35 // 実行結果を、ResultSetクラスに代入 36 rset = pstmt.executeQuery(); 37 if(rset.next()) { 38 userInfDto.setUser(rset.getString("user_name")); 39 userInfDto.setPsw(rset.getInt("user_password")); 40 System.out.println(getUser()); 41 System.out.println(getPsw()); 42 //StringBuilderの初期化を行います。 43 sql.delete(0, sql.length()); 44 sql.append("select task_number, task_title, task_start_date, task_end_date, task_status, task_description from user_table INNER JOIN user_task_table on user_task_table.user_id='" + rset.getString("user_id") + "'where user_name='" + user +"'" + "and user_password=" + psw); 45 System.out.println(sql); 46 // sql文実行準備 47 pstmt = con.prepareStatement(new String(sql)); 48 // sql文実行 49 pstmt.execute(); 50 //結果格納前に初期化を行います。 51 rset = null; 52 System.out.println(getUser()); 53 System.out.println(getPsw()); 54 // 実行結果を、ResultSetクラスに代入 55 rset = pstmt.executeQuery(); 56 ArrayList arrayList = new ArrayList(); 57 List<ArrayList> list = new ArrayList(); 58 while (rset.next()) { 59 arrayList.add(rset.getInt("task_number")); 60 arrayList.add(rset.getString("task_title")); 61 arrayList.add(rset.getDate("task_start_date")); 62 arrayList.add(rset.getDate("task_end_date")); 63 arrayList.add(rset.getInt("task_status")); 64 arrayList.add(rset.getString("task_description")); 65 list.add(arrayList); 66 } 67 userInfDto.setUserInformationList(list); 68 } 69 } else { 70 return userInfDto; 71 } 72 } catch (SQLException e) { 73 // TODO 自動生成された catch ブロック 74 e.printStackTrace(); 75 } finally { 76 try { 77 if (con != null) { 78 con.close(); 79 } 80 } catch (SQLException e) { 81 // TODO 自動生成された catch ブロック 82 e.printStackTrace(); 83 } 84 } 85 return userInfDto; 86 } 87 88}
試したこと
userInfDto.setUserInformationList(list);をwhile(rset.next())の中に入れて、userInfDto.setUserInformationList(list);に
値を格納後、毎回arraylistを初期化してみたりしたのですが、うまくいきませんでした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/24 13:17
2019/02/26 12:33