回答編集履歴

2

修正

2019/08/06 01:18

投稿

m.ts10806
m.ts10806

スコア80852

test CHANGED
@@ -35,3 +35,27 @@
35
35
  文字列を送信する場合は`''`で囲ってくれるわけですが、`LIKE %?%`のように送信されていると出来上がるSQLは`LIKE %'ほげほげ'%`のようになってしまうので正しくありません。
36
36
 
37
37
  参考:[PreparedStatementを使用してLIKE検索を行いたい](https://tech.pjin.jp/blog/2017/06/23/preparedstatement_problem_solution/)
38
+
39
+ - 入力されてないキーワードも検索対象にするけどそれでいいの?login_idが空で検索すると空のlogin_idを検索しに行きます。「空じゃないものだけ検索対象とする」対応を入れたほうが良いです。
40
+
41
+ 参考:[teratail:【Java】フォームの検索項目の入力有無によってSQL文を生成してデータベースから情報取得したい](https://teratail.com/questions/142357)
42
+
43
+
44
+
45
+ 過去質問は有効活用しましょう。
46
+
47
+ [[検索 tag:Java] の検索結果: 1623件
48
+
49
+ ](https://teratail.com/search?q=%E6%A4%9C%E7%B4%A2+tag%3AJava)
50
+
51
+ [[データベース 検索 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)
52
+
53
+ [[form 検索 tag:Java] の検索結果: 105件
54
+
55
+ ](https://teratail.com/search?q=form+%E6%A4%9C%E7%B4%A2+tag%3AJava)
56
+
57
+ [[フォーム 検索 tag:Java] の検索結果: 40件
58
+
59
+ ](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)
60
+
61
+ [[データベース 検索 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

スコア80852

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