java.sql.Timestamp 値を使用して MySQL 5.6 の DATETIME 列に挿入しようとすると、常に次のエラーが発生します。
com.mysql.jdbc.MysqlDataTruncation: データの切り捨て: 不正な日時値: 行 1 の列 'invoice_date' の ''
このプロジェクトの最初の開発者は、Java.util.Date を Timestamp に変換して DATETIME に挿入したり、その逆に変換したり、データベース接続を処理したりする、Prepared ステートメントを作成するカスタム JAR を持っていました。これについてのドキュメントがないため、これは私の仮定であることに注意してください。タイムスタンプを使用して PreparedStatement を介して DATETIME に挿入しようとすると、次のようなものを使用して同じ結果が得られました。
ps.setTimestamp(3, 新しいタイムスタンプ(date.getTime()));
java.sql.Date を使用してこの問題を解決できるように、独自の接続を作成する必要がありました。ただし、結果として時間値がゼロになります。使った
ps.setDate(3, new java.sql.Date(date.getTime()));
そして、私は次のようなものを取得します
2013-06-27 00:00:00
私たちが知っているように、 java.sql.Date は時間を格納しないためです。
驚いたことに、MySQL 5.0 を使用するサーバーでは、これは正常に機能します。Timestamp のミリ秒値が DATETIME へのキャストの問題を引き起こしていると思いますか? オリジナルは古いバージョンで動作するため。5.0 ですべてを再インストールせずにこれを解決する方法はありますか?