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

質問編集履歴

4

情報の追記

2018/08/21 23:14

投稿

RogerFederer
RogerFederer

スコア19

title CHANGED
File without changes
body CHANGED
@@ -30,7 +30,7 @@
30
30
  sql += " WHERE name like ?";
31
31
  flag = true;
32
32
  }
33
-     //誕生が入力されていれば処理を実施
33
+     //誕生が入力されていれば処理を実施
34
34
  if (user.getBirthday()!=null) {
35
35
       //名前が入力されていなかった場合はWHERE、されていたらAND
36
36
  if(!flag){
@@ -42,7 +42,7 @@
42
42
  }
43
43
      //職業が入力されていれば処理を実施
44
44
  if (user.getType()!=0) {
45
-      //名前も誕生も空欄だった場合はwhere、どちらかもしくは両方入力されていたらAND
45
+      //名前も誕生も空欄だった場合はwhere、どちらかもしくは両方入力されていたらAND
46
46
  if(!flag){
47
47
  sql += " WHERE type like ?";
48
48
  }else{
@@ -60,6 +60,10 @@
60
60
  ① 入力項目の有無によってSQL文を連結していく方法はこれで良いのでしょうか? ifがネストになっている点がとても拙く感じるのですが・・・。
61
61
 
62
62
  ② ★で示す、?に対応するパラメータインデックス値はどのように決めればよいでしょうか。
63
- 具体的に悩む点は、名前だけ空欄の場合、名前も誕生も空欄の場合、誕生だけ空欄の場合などどこが空欄のまま検索されるかで?の個数も変わるのでどうパラメータインデックス値を当て込めばいいかがわかりせん
63
+ 具体的に悩む点は、名前だけ空欄の場合、名前も誕生も空欄の場合、誕生だけ空欄の場合などどこが空欄のまま検索されるかで?の個数も変わるので、例えば名前だけ空欄にするとインデックス範囲は2でだと怒られます
64
64
 
65
+ java.sql.SQLException: Parameter index out of range (3 > number of parameters, which is 2).
66
+
67
+ ?の個数が選択次第で変わる状態でどうパラメータインデックス値を当て込めばいいかがわかりません。
68
+
65
69
  宜しくお願い致します。

3

情報の追記

2018/08/21 23:14

投稿

RogerFederer
RogerFederer

スコア19

title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,6 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- jspのフォーム画面の検索項目3つ(氏名、誕生、職種)に入力された値をサーブレットで取得し、SQL文のwhere句以降に連結してmysqlデータベースのテーブル(usertable)から検索結果を取得したいです。
3
+ jspのフォーム画面の検索項目3つ(氏名、誕生、職種)に入力された値をサーブレットで取得し、SQL文のwhere句以降に連結してmysqlデータベースのテーブル(usertable)から検索結果を取得したいです。
4
4
 
5
5
  条件:
6
6
  ① JDBCのPreparedStatementを利用する

2

誤記の修正

2018/08/21 23:01

投稿

RogerFederer
RogerFederer

スコア19

title CHANGED
File without changes
body CHANGED
@@ -5,7 +5,7 @@
5
5
  条件:
6
6
  ① JDBCのPreparedStatementを利用する
7
7
  ② AND検索をする
8
- リスト検索項目が空欄の場合は、その項目は絞り込み対象外とする。
8
+ ③ 検索項目が空欄の場合は、その項目は絞り込み対象外とする。
9
9
  ④ 全て空欄の場合、全レコードを取得する
10
10
 
11
11
  上記条件③のせいで、

1

誤記の修正

2018/08/21 20:36

投稿

RogerFederer
RogerFederer

スコア19

title CHANGED
File without changes
body CHANGED
@@ -34,10 +34,10 @@
34
34
  if (user.getBirthday()!=null) {
35
35
       //名前が入力されていなかった場合はWHERE、されていたらAND
36
36
  if(!flag){
37
- sql += " WHERE birthday like ?"; //nameが空欄の時はこの?が1番目
37
+ sql += " WHERE birthday like ?"; //名前が空欄の時はこの?が1番目
38
38
  flag = true;
39
39
  }else{
40
- sql += " AND birthday like ?";
40
+ sql += " AND birthday like ?"; //名前が入力されればこの?は2番目
41
41
  }
42
42
  }
43
43
      //職業が入力されていれば処理を実施
@@ -46,7 +46,7 @@
46
46
  if(!flag){
47
47
  sql += " WHERE type like ?";
48
48
  }else{
49
- sql += " AND type like ?";//nameが空欄=この?が2番目
49
+ sql += " AND type like ?";
50
50
  }
51
51
  }
52
52
  st = con.prepareStatement(sql);