###やりたいこと
・Java,Spring,Postgresqlを利用したWebシステムで、画面の検索フォームから入力した項目について検索を行いたい。
・フォーム上の入力項目について、Select部品の選択及びテキスト入力のあった項目のみを検索条件に設定したい。
・特定項目について、IN句で複数の項目値を検索条件に設定したい。
発生している問題・エラーメッセージ
IN句で設定している項目について、項目値を渡すMap内容が1件の場合は検索が動作するが、Map内に2件項目値が入るとエラーメッセージが出る。
2021-07-19 15:21:04.283 ERROR 9996 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [select * from XXXtable where 1=1 and(?='' or webacceptno like'%'||?||'%') and...(?, ?='0' or requestkbn IN(CAST(?, ? AS INTEGER))) order by ?]; nested exception is org.postgresql.util.PSQLException: ERROR: ","またはその近辺で構文エラー
位置: 311] with root cause
org.postgresql.util.PSQLException: ERROR: ","またはその近辺で構文エラー
java
1 2sql="select * from XXXtable where 1=1" 3+ " and(:acceptno='' or acceptno like'%'||:acceptno||'%')" 4... 5+ " and(:requestkbn='0' or requestkbn IN(CAST(:requestkbn AS INTEGER)))" 6+ " order by :sort"; 7 8Set<Integer> rkKbnSet = new HashSet<>(); 9(画面からの区分をMapにセット...区分が"1"または"2"の場合は1または2(Integer)をセット。 10 区分が"3"の場合は1,2をMapにセットする) 11 12parameters = new MapSqlParameterSource("acceptno",AcceptNo) 13... 14.addValue("requestkbn", rkKbnSet).addValue("sort",sort); 15 16List<Map<String, Object>> ret = npjdbcTemplate.queryForList(sql,parameters); 17
試したこと
対策を考える過程で、データ型指定を外した場合異なるエラーメッセージが出る。
2021-07-19 15:41:30.459 ERROR 9996 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [
select * from shinseiitirantable where 1=1 and(?='' or acceptno like'%'||?||'%') ... and(? is null or requestkbn IN(?)) order by ?
]; nested exception is org.postgresql.util.PSQLException: ERROR: パラメータ$***のデータ型が決定できません] with root cause
補足情報(FW/ツールのバージョンなど)
Java1.8
Spring Tool Suite 4 Version: 4.6.1.RELEASE
PostgreSQL 11.9
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。