TL; DR
myPreparedStatement.setObject(
… ,
LocalDate.parse(
"01/01/1900" ,
DateTimeFormatter.ofPattern("dd/MM/uuuu")
)
)
詳細
Answer by Just another Java programmerが正しいです。
さらに、文字列を使用して日付時刻の値をデータベースと通信しないでください。日時クラスを使用します。
最新の方法は、面倒なレガシー日時クラスに取って代わるjava.timeクラスです。
LocalDate
LocalDate
クラスは、時間日の時間帯なしなし日付専用の値を表しています。
タイムゾーンは、日付を決定する際に重要です。任意の瞬間について、日付は地球の周りでゾーンごとに異なります。たとえば、Paris Franceの真夜中の数分後には、新しい日がありますが、まだ「昨日」はMontréal Québecです。
ZoneId z = ZoneId.of("America/Montreal");
LocalDate today = LocalDate.now(z);
標準ISO 8601形式の文字列から直接解析することができます。
LocalDate localDate = LocalDate.parse("2016-01-23");
または各部分を指定します。
LocalDate localDate = LocalDate.of(2016, Month.JANUARY , 23);
他の形式を解析するには、DateTimeFormatter
クラスを使用します。多くの例でスタックオーバーフローを検索します。あなたのJDBC driverがJDBC 4.2以降に準拠している場合
データベース
、PreparedStatement::setObject
とjava.timeタイプを渡すとResultSet::getObject
をフェッチすることができるはずです。
myPreparedStatement.setObject(… , localDate);
...か...
myPreparedStatement.setObject(… , localDate , JDBCType.DATE);
をあなたのドライバーはそれほど有効でない場合は、java.sql.Date
を使用してにフォールバック。この厄介なクラスは、日付のみの値を表すふりをします(実際には、無視するはずの真夜中に設定された時間コンポーネントを持っています)。 java.timeに/からjava.timeに変換するには、古いクラスに追加された新しいメソッドを探します。
java.sql.Date sqlDate = java.sql.Date.valueOf(localDate);
他の方向に進みます。
LocalDate localDate = sqlDate.toLocalDate();
PreparedStatement::setDate
に渡す。
myPreparedStatement.setDate(… , sqlDate);
java.timeについて
java.timeフレームワークは、Java 8に組み込まれており、後にされています。これらのクラスは、java.util.Date
、Calendar
、& SimpleDateFormat
など、面倒な古いlegacy日時クラスに取って代わります。
Joda-Timeプロジェクトは、今maintenance modeで、java.timeへの移行をアドバイスします。
詳しくはOracle Tutorialをご覧ください。そして、多くの例と説明のためにStack Overflowを検索してください。仕様はJSR 310です。
ここで、java.timeクラスを取得するには?
ThreeTen-Extraプロジェクトでは、追加のクラスでjava.timeを拡張します。このプロジェクトは、将来のjava.timeへの追加の可能性を証明する土台です。ここでは、Interval
、YearWeek
、YearQuarter
、moreなどの便利なクラスがあります。
実際にSQLに書き込もうとしているコード部分を表示することができます – alainlompo
@alainlompo:row = new STRUCT(myNewRon、getConnection()、attributes); – sTg