ORMLITE:MySQLの日付列のデフォルト値 "0000-00-00"のデフォルト値を扱う

StackOverflow https://stackoverflow.com/questions/9501817

  •  14-11-2019
  •  | 
  •  

質問

この列定義を使用する変更できない既存のデータベースを使用する必要があります。

"birthdate" date NOT NULL DEFAULT '0000-00-00'
.

デフォルト値は有効な日付ではありません:

スレッドの例外「メイン」java.lang.RuntimeException:列29からタイムスタンプに値 '0000-00-00'を変換できません。

デフォルト値nullが見つかった場合は、Ormliteから'0000-00-00'を返す方法はありますか?

役に立ちましたか?

解決

これを行うことができる唯一の方法は、カスタムペーパーです。その後、 ormlite データベースからデータを格納して取得する方法を制御できます。この機能は残念ながらもよく文書化されていません。

このようなクラスを指定します。

@DatabaseField(persisterClass = MyDatePersister.class)
Date birthDate;
.

それからあなたの過敏なクラスは次のようになるかもしれません:

public class MyDatePersister extends com.j256.ormlite.field.types.BaseDataType {
    private static final MyDatePersister singleTon = new MyDatePersister();
    @SuppressWarnings("deprecation")
    private static final Timestamp ZERO_TIMESTAMP = new Timestamp(0, 0, 0, 0, 0, 0, 0);

    private MyDatePersister() {
        super(SqlType.DATE, new Class<?>[] { Date.class });
    }

    public static MyDatePersister getSingleton() {
        return singleTon;
    }

    @Override
    public Object resultToSqlArg(FieldType fieldType, DatabaseResults results,
            int columnPos) throws SQLException {
        Timestamp timestamp = results.getTimestamp(columnPos);
        if (timestamp == null || ZERO_TIMESTAMP.equals(timestamp)) {
            return null;
        } else {
            return timestamp;
        }
    }
}
.

DateTypeソースがオンラインです。これが役立つことを願っています。

他のヒント

NOT NULLのデフォルト '0000-00-00'からの誕生日を変更する方法NULL値を許可するには、情報から「0000-00-00」を処理する必要はありません。

これを行うもう1つの方法があります。JDBC接続文字列の場合次のように追加します。 zeroDateTimeBehavior= controltonull

SO接続文字列にこれを追加した後、次のようになります.JDBC:MySQL://:/?zerodateTimeBehavior= controltonull

hth、
ナレンドラ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top