質問するログイン新規登録

回答編集履歴

2

修正

2019/08/06 01:18

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -16,4 +16,16 @@
16
16
  手順としては、?だけSQLに入れてsetString()するときに%%もつけて渡します。
17
17
  プリペアドステートメントはset時にパラメータをエスケープしたうえでSQLとして送信してくれるものです。
18
18
  文字列を送信する場合は`''`で囲ってくれるわけですが、`LIKE %?%`のように送信されていると出来上がるSQLは`LIKE %'ほげほげ'%`のようになってしまうので正しくありません。
19
- 参考:[PreparedStatementを使用してLIKE検索を行いたい](https://tech.pjin.jp/blog/2017/06/23/preparedstatement_problem_solution/)
19
+ 参考:[PreparedStatementを使用してLIKE検索を行いたい](https://tech.pjin.jp/blog/2017/06/23/preparedstatement_problem_solution/)
20
+ - 入力されてないキーワードも検索対象にするけどそれでいいの?login_idが空で検索すると空のlogin_idを検索しに行きます。「空じゃないものだけ検索対象とする」対応を入れたほうが良いです。
21
+ 参考:[teratail:【Java】フォームの検索項目の入力有無によってSQL文を生成してデータベースから情報取得したい](https://teratail.com/questions/142357)
22
+
23
+ 過去質問は有効活用しましょう。
24
+ [[検索 tag:Java] の検索結果: 1623件
25
+ ](https://teratail.com/search?q=%E6%A4%9C%E7%B4%A2+tag%3AJava)
26
+ [[データベース 検索 tag:Java] の検索結果: 168件](https://teratail.com/search?q=%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9+%E6%A4%9C%E7%B4%A2+tag%3AJava)
27
+ [[form 検索 tag:Java] の検索結果: 105件
28
+ ](https://teratail.com/search?q=form+%E6%A4%9C%E7%B4%A2+tag%3AJava)
29
+ [[フォーム 検索 tag:Java] の検索結果: 40件
30
+ ](https://teratail.com/search?q=%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0+%E6%A4%9C%E7%B4%A2+tag%3AJava)
31
+ [[データベース 検索 tag:Java,jsp is:accepted] の検索結果: 20件](https://teratail.com/search?q=%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9+%E6%A4%9C%E7%B4%A2+tag%3AJava%2Cjsp+is%3Aaccepted)

1

修正

2019/08/06 01:18

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -1,1 +1,19 @@
1
- doPostのときにviewに投げてないからかと思います。
1
+ doPostのときにviewに投げてないからかと思います。
2
+
3
+ 他にもあります。
4
+
5
+ そもそも
6
+ > SELECT * FROM user WHERE login_id = ? and name LIKE %?% and WHERE birth_date >=? AND <?
7
+
8
+ SQLがおかしいです。
9
+ **アプリケーションから実行する前に想定通りの結果が得られるSQLを直にDBに対して実行確認しましょう。**
10
+
11
+ - WHEREの中にWHEREがあります。
12
+ - birth_dateのbirthdateendをセットする方にカラムがありません。
13
+ 日付や数値など範囲指定する場合はbetweenが有用です。
14
+ 参考:[範囲で抽出(BETWEEN)](http://sql.main.jp/sql07.html)
15
+ - プリペアドステートメントにするのであればそこに%%があるのはおかしいです。
16
+ 手順としては、?だけSQLに入れてsetString()するときに%%もつけて渡します。
17
+ プリペアドステートメントはset時にパラメータをエスケープしたうえでSQLとして送信してくれるものです。
18
+ 文字列を送信する場合は`''`で囲ってくれるわけですが、`LIKE %?%`のように送信されていると出来上がるSQLは`LIKE %'ほげほげ'%`のようになってしまうので正しくありません。
19
+ 参考:[PreparedStatementを使用してLIKE検索を行いたい](https://tech.pjin.jp/blog/2017/06/23/preparedstatement_problem_solution/)