ormlite: работа со значением по умолчанию «0000-00-00» для столбца «Дата» в Mysql - PullRequest
0 голосов
/ 29 февраля 2012

Я должен использовать существующую базу данных, которую я не могу изменить, которая использует это определение столбца:

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

Значение по умолчанию не является допустимой датой:

Исключение вthread "main" java.lang.RuntimeException: Невозможно преобразовать значение '0000-00-00' из столбца 29 в TIMESTAMP.

Есть ли способ вернуть null из ormlite, если значение по умолчанию'0000-00-00' найден?

Ответы [ 3 ]

1 голос
/ 29 февраля 2012

Единственный способ сделать это - с помощью пользовательского персистера.Затем вы можете контролировать, как 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 онлайн.Надеюсь, это поможет.

0 голосов
/ 30 октября 2013

Есть еще один способ сделать это.Для строки подключения JDBC добавьте следующее: zeroDateTimeBehavior = convertToNull .

Поэтому после добавления этого в строку подключения это будет выглядеть следующим образом: jdbc: mysql: //: /? ZeroDateTimeBehavior = convertToNull

hth,
Narendra

0 голосов
/ 29 февраля 2012

Как насчет изменения даты рождения с NOT NULL DEFAULT '0000-00-00', чтобы разрешить значения NULL, тогда вам не нужно обрабатывать '0000-00-00', поскольку из вашей информации дата рождения может быть нулевой.

...