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

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

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

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

SQL

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

HTML

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

Q&A

解決済

1回答

9804閲覧

データベースを検索し、web上にデータの検索結果を一覧として表示したい。

退会済みユーザー

退会済みユーザー

総合スコア0

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/05 15:14

前提・実現したいこと

データベースとサーブレットを連携させて、ユーザー検索機能を備えたユーザー一覧表を作成しています。
はじめにページにアクセスすると、データベースに登録されている全てのユーザーのID、名前、生年月日の一覧表が表示されます。
検索機能では以下の項目でデータベースに登録されているユーザーを検索し、一覧表に表示させたいです。
・ID(完全一致)
・名前(部分一致)
・生年月日(指定した開始日と終了日の範囲内の日付にあたるもの)

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

java

1__beansを作成__ 2public class User implements Serializable { 3 private String id; 4 private String loginid; 5 private String name; 6 private String birthdate; 7 private String password; 8 private String createdate; 9 private String updatedate; 10public User(String loginid,String name,String birthdate1,String birthdate2) { 11 this.loginid=loginid; 12 this.name=name; 13 this.birthdate=birthdate1; 14 this.birthdate=birthdate2; 15 } 16__以下、アクセサのため省略__

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 String sql="SELECT * FROM user WHERE login_id = ? and name LIKE %?% and WHERE birth_date >=? AND <?"; 8 9 PreparedStatement pStmt = conn.prepareStatement(sql); 10 11 pStmt.setString(1, loginid); 12 pStmt.setString(2, name); 13 pStmt.setString(3, birthdatestart); 14 pStmt.setString(4, birthdateend); 15 16 ResultSet rs = pStmt.executeQuery(); 17 18 if (!rs.next()) { 19 return null; 20 } 21 String loginIdData = rs.getString("login_id"); 22 String nameData = rs.getString("name"); 23 String birthdateStart = rs.getString("birth_date"); 24 String birthdateEnd = rs.getString("birth_date"); 25 26 return new User(loginIdData,nameData,birthdateStart,birthdateEnd); 27 }catch (SQLException e) { 28 e.printStackTrace(); 29 return null; 30 }finally { 31 if (conn != null) { 32 try { 33 conn.close(); 34 } catch (SQLException e) { 35 e.printStackTrace(); 36 return null; 37 } 38 } 39 } 40 41 }

HTML

1__userList.jsp内で検索フォームを作成__ 2<form method="post" action="UserListServlet"> 3 <div class="input-loginid row"> 4 <label for="loginid" class="col-sm-3 col-form-label">ログインID</label> 5 <input type="text" name="loginid" class="form1 form-control"> 6 </div> 7 8 <div class="input-user-name row"> 9 <label for="user-name" class="col-sm-3 col-form-label">ユーザ名</label> 10 <input type="text" name="user-name" class="form2 form-control"> 11 </div> 12 13 14 <div class="input-birth-date row"> 15  <label for="birth-date" class="row col-sm-3 col-form-label">生年月日</label> 16   <div class="row col-sm-9"> 17 <div class="col-sm-5"> 18 <input type="date" name="date-start" id="date-start" class="form-control"/> 19 </div> 20 21 <div class="col-sm-1 text-center"> 2223 </div> 24 25 <div class="col-sm-5"> 26 <input type="date" name="date-end" id="date-end" class="form-control"/> 27 </div> 28 </div> 29 </div> 30 31 32 <div class="text-right"> 33 <button type="submit" value="検索">検索</button> 34 </div> 35 36 37 </form> 38 39__userList.jsp内で一覧表を作成__ 40<div class=table-responsive> 41 <table class="table table-striped"> 42 <table class="table table-bordered"> 43 <thead class="thead-light"> 44 <tr> 45 <th>ログインID</th> 46 <th>ユーザ名</th> 47 <th>生年月日</th> 48 <th></th> 49 </tr> 50 </thead> 51 52 <tbody> 53  <c:forEach var="userlist" items="${requestScope.userList}" > 54     <c:forEach var="user" items="${requestScope.user}" > 55 56 <tr> 57 58 <td>${userlist.loginid}</td> 59 <td>${userlist.name}</td> 60 <td>${userlist.birthdate}</td> 61      **①全てのユーザーの情報を表示** 62 63 <td>${user.loginid}</td> 64 <td>${user.name}</td> 65 <td>${user.birthdate}</td> 66 **②検索結果の表示** 67 68 69 <td> 70 <a class="btn btn-primary" href="userDetail.html">詳細</a> 71 <a class="btn btn-success" href="userUpdate.html">更新</a> 72 <a class="btn btn-danger" href ="userDelete.html">削除</a> 73 </td> 74 </tr> 75 </c:forEach> 76 </c:forEach> 77 78 </tbody> 79 </table> 80 </table> 81 82 </div>

java

1__UserListServletで全ユーザー情報の取得、および検索処理の実行__ 2protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 3 // TODO Auto-generated method stub 4 UserDao userDao = new UserDao(); 5 List<User> userList = userDao.findAll(); 6 7 request.setAttribute("userList", userList); 8 9 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/userList.jsp"); 10 dispatcher.forward(request, response); 11 } 12 13protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 14 request.setCharacterEncoding("UTF-8"); 15 16 String loginid=request.getParameter("loginid"); 17 String name=request.getParameter("user-name"); 18 String birthdateStart=request.getParameter("date-start"); 19 String birthdateEnd=request.getParameter("date-end"); 20 21 UserDao userDao=new UserDao(); 22 User user=userDao.searchUser(loginid, name, birthdateStart, birthdateEnd); 23 24 request.setAttribute("user", user); 25}

試したこと

JSPファイル内の①だけ書くと全てのデータの情報が表示されます。②を書き加えると①の情報も含め、データの情報が表示されなくなってしまいます。
それとEL式の{user.birthdate}に該当するものがないのは把握できているのですが、どのように生年月日を出力すれば良いのか思いつきません。
初学者であるため、質問の仕方や説明に不十分な点があるかもしれません。すみません。

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

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

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

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

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

guest

回答1

0

ベストアンサー

doPostのときにviewに投げてないからかと思います。

他にもあります。

そもそも

SELECT * FROM user WHERE login_id = ? and name LIKE %?% and WHERE birth_date >=? AND <?

SQLがおかしいです。
アプリケーションから実行する前に想定通りの結果が得られるSQLを直にDBに対して実行確認しましょう。

  • WHEREの中にWHEREがあります。
  • birth_dateのbirthdateendをセットする方にカラムがありません。

日付や数値など範囲指定する場合はbetweenが有用です。
参考:範囲で抽出(BETWEEN)

  • プリペアドステートメントにするのであればそこに%%があるのはおかしいです。

手順としては、?だけSQLに入れてsetString()するときに%%もつけて渡します。
プリペアドステートメントはset時にパラメータをエスケープしたうえでSQLとして送信してくれるものです。
文字列を送信する場合は''で囲ってくれるわけですが、LIKE %?%のように送信されていると出来上がるSQLはLIKE %'ほげほげ'%のようになってしまうので正しくありません。
参考:PreparedStatementを使用してLIKE検索を行いたい

  • 入力されてないキーワードも検索対象にするけどそれでいいの?login_idが空で検索すると空のlogin_idを検索しに行きます。「空じゃないものだけ検索対象とする」対応を入れたほうが良いです。

参考:teratail:【Java】フォームの検索項目の入力有無によってSQL文を生成してデータベースから情報取得したい

過去質問は有効活用しましょう。
[検索 tag:Java] の検索結果: 1623件

[データベース 検索 tag:Java] の検索結果: 168件
[form 検索 tag:Java] の検索結果: 105件

[フォーム 検索 tag:Java] の検索結果: 40件

[データベース 検索 tag:Java,jsp is:accepted] の検索結果: 20件

投稿2019/08/06 00:16

編集2019/08/06 01:18
m.ts10806

総合スコア80850

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問