Eu tenho uma tabela de banco de dados contendo datas
(`date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00').
Estou usando o MySQL. Às vezes, a partir do programa, os dados são transmitidos sem a data para o banco de dados. Portanto, o valor da data é atribuído automaticamente 0000-00-00 00:00:00
quando os dados da tabela são chamados com a coluna da data em que ocorre o erro
...'0000-00-00 00:00:00' can not be represented as java.sql.Timestamp.......
Tentei passar o valor nulo para a data ao inserir dados, mas ele é atribuído à hora atual.
Existe alguma maneira de obter o ResultSet
sem alterar a estrutura da tabela?
Se a "data" '0000-00-00 "é ou não uma" data "válida é irrelevante para a pergunta." Basta alterar o banco de dados "raramente é uma solução viável.
Fatos:
Então, se eu "apenas mudar o banco de dados", milhares de linhas de código PHP serão quebradas.
Os programadores de Java precisam aceitar a data zero do MySQL e precisam colocar uma data zero de volta no banco de dados, quando outros idiomas dependem desse "recurso".
Um programador que se conecta ao MySQL precisa lidar com datas nulas e 0000-00-00, além de datas válidas. Alterar 0000-00-00 para nulo não é uma opção viável, pois não é mais possível determinar se era esperado que a data fosse 0000-00-00 para gravação no banco de dados.
Para 0000-00-00, sugiro verificar o valor da data como uma sequência e alterá-lo para ("y", 1) ou ("aaaa-MM-dd", 0001-01-01) ou em qualquer nome inválido. Data do MySQL (menos de ano 1000, iirc). O MySQL possui outro "recurso": datas baixas são convertidas automaticamente para 0000-00-00.
Percebo que minha sugestão é uma crítica. Mas o mesmo ocorre com o tratamento de datas do MySQL. E dois julgamentos não acertam. O fato é que muitos programadores terão que lidar com datas zero do MySQL para sempre .
fonte
Anexe a seguinte instrução ao protocolo JDBC-mysql:
por exemplo:
fonte
Em vez de usar datas falsas como
0000-00-00 00:00:00
ou0001-01-01 00:00:00
(a última deve ser aceita por ser uma data válida), altere o esquema do banco de dados para permitirNULL
valores.fonte
Como alternativa, quando você não pode alterar a coluna da data ou atualizar os valores, ou enquanto essas modificações ocorrem, você pode fazer uma seleção usando um caso / quando.
fonte
Lutei com esse problema e implementei a solução de concatenação de URLs contribuída por @Kushan na resposta aceita acima. Funcionou na minha instância local do MySQL. Mas quando implantei meu aplicativo Play / Scala no Heroku, ele não funcionaria mais. O Heroku também concatena vários argumentos à URL do banco de dados que eles fornecem aos usuários, e esta solução, devido à concatenação de uso de "?" Do Heroku antes de seu próprio conjunto de argumentos, não funcionará. No entanto, encontrei uma solução diferente que parece funcionar igualmente bem.
Coloquei isso nas descrições da minha tabela e resolveu o problema de '0000-00-00 00:00:00' não pode ser representado como java.sql.Timestamp
fonte
você pode tentar assim
fonte
Não houve ano 0000 e não há mês 00 ou dia 00. Sugiro que você tente
Enquanto um ano 0 foi definido em alguns padrões, é mais provável que seja confuso do que IMHO útil.
fonte
basta lançar o campo como char
Por exemplo: elenco (atualizado) como char como atualizado
fonte
Eu sei que essa será uma resposta tardia, mas aqui está a resposta mais correta.
No banco de dados MySQL, altere seu
timestamp
valor padrão paraCURRENT_TIMESTAMP
. Se você tiver registros antigos com o valor falso, precisará corrigi-los manualmente.fonte
Você pode remover a propriedade "not null" da sua coluna na tabela mysql, se não for necessário. quando você remove a propriedade "not null", não há necessidade de conversão "0000-00-00 00:00:00" e o problema desaparece.
Pelo menos funcionou para mim.
fonte
Acredito que seja de ajuda completa para quem está recebendo isso abaixo. Exceção ao bombeamento de dados através do logstash Erro: logstash.inputs.jdbc - Exceção ao executar a consulta JDBC {: exception => #}
Resposta: jdbc: mysql: // localhost: 3306 / database_name? ZeroDateTimeBehavior = convertToNull "
ou se você estiver trabalhando com mysql
fonte