ormlite:Lidando com um Valor padrão de "0000-00-00" para uma coluna de Data no Mysql

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

  •  14-11-2019
  •  | 
  •  

Pergunta

Eu tenho que usar um Banco de dados existente que eu não posso mudar que utiliza esta definição de coluna:

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

O valor padrão não é uma data válida:

Exception in thread "main" do java.lang.RuntimeException:Não é possível converter o valor de '0000-00-00' da coluna de 29 de CARIMBO de data / hora.

Existe uma maneira de voltar null a partir de ormlite se o valor padrão '0000-00-00' é encontrado?

Foi útil?

Solução

A única maneira de fazer isso é com um personalizado persister.Em seguida, você pode controlar como ORMLite armazena e recupera dados a partir do banco de dados.Esse recurso é [infelizmente] não está bem documentada.

Especificar a classe assim:

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

Em seguida, o seu persister classe pode parecer com:

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 de origem está on-line.Espero que isso ajude.

Outras dicas

Como mudar a sua data de nascimento a partir de um not NULL DEFAULT '0000-00-00' para permitir valores NULOS, em seguida, você não tem que lidar com o '0000-00-00', pois a partir de sua informação, a data de nascimento pode ser nulo.

Não há outra maneira de fazer isso.Para a Seqüência de conexão JDBC, adicione o seguinte: zeroDateTimeBehavior=convertToNull.

Então, depois de adicionar esta a seqüência de caracteres de conexão, ele vai parecer como a seguir:jdbc:mysql://:/?zeroDateTimeBehavior=convertToNull

hth,
Narendra

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top