###前提・実現したいこと
SpringMVC,PostgreSQLを用いて、
開始時間と終了時間の間のデータをデータベースから拾ってくる。
結果をViewで表示したいです。
検索条件の入力をViewで行う。
start_timeとend_timeはtime型(time without time zone)です。
他の型の列(date型やvarchar型の)はDaoクラスから拾い、表示までできることは確認しています。
###発生している問題・エラーメッセージ
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: PreparedStatementCallback; org.postgresql.util.PSQLException: ERROR: "$1"またはその近辺で構文エラー
###該当のソースコード
Java
1/*略*/ 2@Repository 3public class TestDao { 4 private static final String TEST_SEARCH= 5 "SELECT start_time,end_time " 6 +"FROM test_table " 7 +"WHERE start_time BETWEEN TIME ?" 8 +"AND TIME '24:00' " 9 +"AND end_time BETWEEN TIME '00:00'" 10 +"AND TIME ?"; 11 12 @Autowired 13 private JdbcTemplate jdbcTemplate; 14 15 public List<TestForm>TestResult(TestForm form) { 16 17 String startTime = form.getStartTime(); 18 String endTime = form.getEndTime(); 19 20 List<Map<String, Object>> list= 21 jdbcTemplate.queryForList(TEST_SEARCH,startTime,endTime); 22 23 List<TestForm> formList = new ArrayList<TestForm>(); 24 25 for(Map<String,Object> result:list){ 26 TestForm resultForm =new TestForm (); 27 28 resultform.setStartName(result.get("start_time").toString()); 29 resultform.setEndName(result.get("end_time").toString()); 30 31 formList.add(resultForm); 32 } 33 return formList; 34}
###試したこと
"
FROM test_table WHERE start_time
BETWEEN TIME '00:00' TIME '24:00'
AND end_time BETWEEN TIME '00:00' TIME '24:00';
をデータベース側で直接実行したらデータを全件拾うことに成功しました。
CAST(start_time AS TIME)を使ってみましたが特に意味はありませんでした。
SimpleDateFormat format= new SimpleDateFormat("hh:mm:ss");
Date time = format.parse(startTime);
を使っても効果はありませんでした。
入力内容が間違っていると思い(例:"24:00:00")が格納されたStringの変数を作り、queryForListに格納しましたがエラーメッセージは変わらず。
java.sql.Time javaSqlTime = java.sql.Time.valueOf(startTime)も効果なし。
###補足情報(言語/FW/ツール等のバージョンなど)
Java/SpringMVC/STS/PostgreSQL/A5M2
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/16 00:38
2016/09/16 00:48
2016/09/16 00:52