日付・時刻型
日時値、使用日時データ型あなたの列を定義し、Javaで日時のクラスを使用するために。 JDBCドライバの仕事は、これらのタイプを仲介することです。
日時オブジェクトではなく文字列を渡そうとしています。
日時仕事でハーフオープンロジック
は、結末が排他的である一方、初めは包括的であるハーフオープンなアプローチを使用しています。だから、昼食は正午に始まり、午後1時の最初の瞬間まで実行されますが、含まれません。 1週間は月曜日から始まり、次の月曜日まで実行されますが、含まれます。
SELECT * FROM tbl_
WHERE when_ >= ? -- Pass start moment. Inclusive.
AND when_ < ? -- Pass stop moment. Exclusive.
;
SQLコマンドBETWEENは「開始」と「終了」の両方を含む「閉じた」ものです。日時制作には適していません。
解析文字列、日付時刻に
あなたは、日付時刻オブジェクトにユーザー入力を変換する必要があります。ユーザーは文字列型を解析することができます。あるいは、日時ウィジェットを使用することもできます。あなたの場合は、文字列の解析が必要です。 DateTimeFormatter
のスタックオーバーフローを検索すると、何百もの既存の質問と回答が見つかります。
SQL & JDBC
JavaでInstant
クラスは、UTCでタイムライン上の瞬間を表しています。従来のjava.util.Date
クラスに相当しますが、ミリ秒よりも細かいナノ秒の分解能を備えています。
タイムゾーンZoneId
を適用してZonedDateTime
オブジェクトを取得します。レガシークラスGregorianCalendar
と同等です。
ZonedDateTime zdt = ZonedDateTime.parse(input , …) ;
myPreparedStatement.setObject(… , zdt.toInstant()) ;
そして...
Instant instant = myResultSet.getObject(… , Instant.class) ;
ZonedDateTime zdt = instant.atZone(ZoneId.of("America/Montreal")) ;
ヒント
は、命名規則を守ってください。 Javaでは、変数は小文字で始まります。
予約語のデータベースに列の名前を付けないでください。すべての予約語を完全に避ける最も簡単な方法は、すべてのデータベースオブジェクトのすべての名前に末尾のアンダースコアを追加することです。 SQL標準では、末尾にアンダースコアを使用しないことが明示されています。
SQL構文に誤りがあります。 'Date> = 2017年6月12日BETWEEN Date <= June 14、2017' on line 1 –
https://www.w3schools.com/sql/の近くで使用する正しい構文については、MariaDBサーバーのバージョンに対応するマニュアルを参照してください。 sql_dates.asp –