質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

解決済

DBのレコードを配列に格納したら一つのインデックスに複数行レコードが纏めて格納されてしまう

pokemn
pokemn

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

2回答

0評価

0クリップ

141閲覧

投稿2019/02/24 09:34

前提・実現したいこと

いつもお世話になっております。
現在、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

public class Dbaccess extends Userinformationdto{ DataSource ds; public Dbaccess() throws ServletException { try { InitialContext ic = new InitialContext(); ds = (DataSource)ic.lookup("java:/comp/env/jdbc/SQLServer"); } catch(Exception e) { } } public Userinformationdto Confimation(String user, int psw , Userinformationdto userInfDto) { Connection con = null; PreparedStatement pstmt = null; ResultSet rset = null; try { con = ds.getConnection(); if (user != null && psw != 0) { StringBuffer sql = new StringBuffer(); sql.append("select user_id, user_name, user_password from user_table where user_name='" + user +"'" + "and user_password=" + psw ); // sql文実行準備 pstmt = con.prepareStatement(new String(sql)); // sql文実行 pstmt.execute(); // 実行結果を、ResultSetクラスに代入 rset = pstmt.executeQuery(); if(rset.next()) { userInfDto.setUser(rset.getString("user_name")); userInfDto.setPsw(rset.getInt("user_password")); System.out.println(getUser()); System.out.println(getPsw()); //StringBuilderの初期化を行います。 sql.delete(0, sql.length()); 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); System.out.println(sql); // sql文実行準備 pstmt = con.prepareStatement(new String(sql)); // sql文実行 pstmt.execute(); //結果格納前に初期化を行います。 rset = null; System.out.println(getUser()); System.out.println(getPsw()); // 実行結果を、ResultSetクラスに代入 rset = pstmt.executeQuery(); ArrayList arrayList = new ArrayList(); List<ArrayList> list = new ArrayList(); while (rset.next()) { arrayList.add(rset.getInt("task_number")); arrayList.add(rset.getString("task_title")); arrayList.add(rset.getDate("task_start_date")); arrayList.add(rset.getDate("task_end_date")); arrayList.add(rset.getInt("task_status")); arrayList.add(rset.getString("task_description")); list.add(arrayList); } userInfDto.setUserInformationList(list); } } else { return userInfDto; } } catch (SQLException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } finally { try { if (con != null) { con.close(); } } catch (SQLException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } } return userInfDto; } }

試したこと

userInfDto.setUserInformationList(list);をwhile(rset.next())の中に入れて、userInfDto.setUserInformationList(list);に
値を格納後、毎回arraylistを初期化してみたりしたのですが、うまくいきませんでした。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。