検索システムで条件によって変化するSQL文を作成したい。
Java(Servlet/jsp)で検索システムを作っています。
検索条件によって変化するSQL文を作成中にに以下のエラーメッセージが発生しました。
PreparedStatementのsetString文が上手く動作しないのですが、原因がわかる方教えていただきたいです。
発生している問題・エラーメッセージ
java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1).
該当のソースコード
public List<Books> search(String genre,String author, String title){ StringBuilder sql = new StringBuilder(); sql.append ("select * from books where "); boolean genreFlg = false; boolean authorFlg = false; boolean titleFlg = false; boolean andFlg = false; List<Books> result = new ArrayList<Books>(); if(!"".equals(genre)) { sql.append("genre like ?"); genreFlg = true; andFlg = true; } if(!"".equals(author)) { if (andFlg) sql.append(" AND "); sql.append("author like ?"); authorFlg = true; andFlg = true; } if(!"".equals(title)) { if (andFlg) sql.append(" AND "); sql.append("title like ?"); titleFlg = true; andFlg = true; } try { Connection con = DatabaseManager.getConnention(); pstmt = con.prepareStatement(sql.toString()); if(genreFlg) { pstmt.setString(1, "%"+genre+"%"); } if(!genreFlg && authorFlg) { pstmt.setString(1, "%"+author+"%"); }else if(genreFlg && authorFlg) { pstmt.setString(2, "%"+author+"%"); } if(!genreFlg && !authorFlg && titleFlg) { pstmt.setString(1, "%"+title+"%"); }else if (genreFlg && authorFlg && titleFlg) { pstmt.setString(3, "%"+title+"%"); }else if (genreFlg || authorFlg && titleFlg){ pstmt.setString(2, "%"+title+"%"); } rs = pstmt.executeQuery(); while(rs.next()) {・・・・・・・・・
試したこと
デバッグで変数の動きをみたところ、PreparedStatementのsetString文で下記が表示されており、genre変数をsetString出来ていないようでした。
com.mysql.cj.jdbc.ClientPreparedStatement: select * from books where genre like ** NOT SPECIFIED **
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/03 19:50