[Connector/J] Timestamp 0000-00-00 00:00:00問題の解決方法
zeroDateTimeBehavior プロパティで3つの挙動を選ぶようになっているようですが、
別の解決方法を思いつきました。
アプリケーション側の話ではなく、Connector/J側の話です。
Connector/J で以下のクラスを作成し、そのクラスに変換して
返すように実装するのです。
こうすれば、Javaでも、"0000-00-00 00:00:00"が扱えるハズです。
// java.sql.Timestampを継承する。しかしそのメンバは使わない。 public class MySqlTimestamp extends java.sql.Timestamp { int year; ... int nano; public MySqlTimestamp(int year, ...) { this.year = year; ... } // すべてのメソッドをオーバーライドする。 ... }
これでいけると思うのだけれど。
既知のデメリットは継承し、メンバを追加しているのでメモリを余分に喰うことぐらいか。
まぁ、オラクルのJDBCドライバも、(目的は知らないけれど、)同じようにjava.sqlのクラスをそのままの形では使わず、継承させて返していたので、同じようなデメリットは持っている。