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

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

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

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

2回答

5448閲覧

SQLで取得したデータを一覧表としてweb上に表示したい

退会済みユーザー

退会済みユーザー

総合スコア0

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/08/07 05:56

前提・実現したいこと

フォームで入力した情報をもとにSQLでデータを取得し、一覧表としてweb上に表示する検索機能を作成しています。以前の質問にいただいた回答をもとに改良を加えてみました。デバッグで確認したところ、フォームで入力した値を受け取り、SQL文で実行するところまではできているみたいなのですが、取得した情報がページで表示されずに困っています。

java

1__作成したBeans__ 2public User(String loginid,String name,String birthdate) { 3 this.loginid=loginid; 4 this.name=name; 5 this.birthdate=birthdate; 6 } 7__以下、アクセサのため省略__

java

1__作成したDAO__ 2public User searchUser(String loginid,String name,String birthdatestart,String birthdateend) { 3 Connection conn=null; 4 try { 5 conn = DBManager.getConnection(); 6 7 8 String sql = "SELECT * FROM user WHERE login_id<>'admin'"; 9 __以下、各フォームが空欄でない場合、SOL文に条件を付与していく__ 10 if(!loginid.equals("")) { 11 sql += " AND login_id = '" + loginid + "'"; 12 } 13 14 if(!name.equals("")) { 15 sql += " AND name LIKE '%" + name + "%'"; 16 } 17 18 if(!birthdatestart.equals("")) { 19 sql += " AND birth_date<'" + birthdatestart + "'"; 20 } 21 22 if(!birthdateend.equals("")) { 23 sql += " AND birth_date>'" + birthdateend + "'"; 24 } 25 26 27 28 29 Statement stmt = conn.createStatement(); 30 ResultSet rs = stmt.executeQuery(sql); 31 32               if (!rs.next()) { 33 return null; 34 } 35 String loginIdData = rs.getString("login_id"); 36 String nameData = rs.getString("name"); 37 String birthDate = rs.getString("birth_date"); 38 39 40 return new User(loginIdData,nameData,birthDate); 41 }catch (SQLException e) { 42 e.printStackTrace(); 43 return null; 44 }finally { 45 if (conn != null) { 46 try { 47 conn.close(); 48 } catch (SQLException e) { 49 e.printStackTrace(); 50 return null; 51 } 52 } 53 } 54 55 }

java

1__サーブレットのdoPostメソッド__ 2protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 3 request.setCharacterEncoding("UTF-8"); 4 5 String loginid=request.getParameter("loginid"); 6 String name=request.getParameter("user-name"); 7 String birthdateStart=request.getParameter("date-start"); 8 String birthdateEnd=request.getParameter("date-end"); 9 10 __パラメータの入力項目を引数に渡し、DAOのメソッドを実行__ 11 UserDao userDao=new UserDao(); 12 User user=userDao.searchUser(loginid, name, birthdateStart,birthdateEnd); 13 14     __スコープに情報をセット__ 15 request.setAttribute("user", user); 16 **⬆️デバッグするとここがnullになってしまいます** 17 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/userList.jsp"); 18 dispatcher.forward(request, response); 19 20 21 22 23 }

HTML

1__JSPファイル__ 2 <div class=table-responsive> 3 <table class="table table-striped"> 4 <table class="table table-bordered"> 5 <thead class="thead-light"> 6 <tr> 7 <th>ログインID</th> 8 <th>ユーザ名</th> 9 <th>生年月日</th> 10 <th></th> 11 </tr> 12 </thead> 13 14 <tbody> 15 __データベースに登録している全てのユーザーの情報を表示__ 16  <c:forEach var="userlist" items="${requestScope.userList}" > 17 __検索して取得したユーザーの情報を表示__ 18     <c:forEach var="userlist" items="${requestScope.user}" > 19 20 21 22 <tr> 23 24 <td>${userlist.loginid}</td> 25 <td>${userlist.name}</td> 26 <td>${userlist.birthdate}</td> 27 28 <td>${user.loginid}</td> 29 <td>${user.name}</td> 30 <td>${user.birthdate}</td> 31 32 33 34 35 36 37 38 </tr> 39 </c:forEach> 40 </c:forEach> 41 42 43 44 </tbody> 45 </table> 46 </table> 47 48 </div>

デバッグした結果nullになってしまう部分とjspファイル内のEL式の書き方あたりがうまくできていない気がします。
お力をお貸しいただきたいです。よろしくお願いします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/08/07 06:00

実際のコードにはない記述はコードブロックから出していただけると確認しやすくなります
m.ts10806

2019/08/07 06:16

その前の質問で私の回答の中にある 「アプリケーションから実行する前に想定通りの結果が得られるSQLを直にDBに対して実行確認しましょう。」 は確認されたのでしょうか。 日付範囲のためのbetweenも利用された形跡がありませんし、 前の質問のコードにはあったプリペアドステートメントが消えてます。 あまり望ましくない実装を地でいっているので、あまりアドバイスした意味がなかったのではないかと感じていますが。。
m.ts10806

2019/08/07 06:17

とりあえず前の質問に回答した者としてのアドバイスは「前の回答をきちんと見直して」です。
guest

回答2

0

nullになっているのは、SQLを実行した結果エラーになっているからではないでしょうか。

投稿2019/08/07 09:08

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

java

1return new User(loginIdData,nameData,birthDate);

の処理が通っているのであれば

java

1 User user=userDao.searchUser(loginid, name, birthdateStart,birthdateEnd);

の中身がnullになることはありません

select文の結果が0件だった場合とSQLExceptionをcatchした場合にnullを返しているので
このどちらかを通っているものと思われます

・生成されるSQL文が正しいものか確認する
・データベースに正しく中身が入っているか確認する

ことが必要でしょう。

また、処理を見る限り業務ではなく研修や課題で作成しているものと勝手に推測しますが

preparedStatementを扱うこと(すでに指摘されていますが)
select * ~~ですべての検索結果を取得するのは避けることは徹底したほうが良いかと。

投稿2019/08/07 07:39

tetutetu

総合スコア419

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問