Erro ao inserir data (Java 11 + JDBC 4.3 + Firebird 2.5)
Olá a todos.
Estou enfrentando problemas ao tentar fazer algo parecido com o seguinte:
Ao executar o setDate do PreparedStatement, é lançada a seguinte exceção:
org.firebirdsql.jdbc.field.TypeConversionException: Error converting to date.
at org.firebirdsql.jdbc.field.FBField.setDate(FBField.java:722)
at org.firebirdsql.jdbc.AbstractPreparedStatement.setDate(AbstractPreparedStatement.java:318)
Já tentei converter a data em String para usar o Date.valueOf(String s) mas, mesmo assim a exceção é lançada.
Alguém já passou por isso e conseguiu resolver via JDBC?
Estou enfrentando problemas ao tentar fazer algo parecido com o seguinte:
private final String INSERT = "insert into tabela (datacompra) values (?);" // LocalDate d = LocalDate.now(); PreparedStatement pstm = con.prepareStatement(INSERT); pstm.setDate(Date.valueOf(d)); // <- aqui lança a exceção pstm.executeUpdate();
Ao executar o setDate do PreparedStatement, é lançada a seguinte exceção:
org.firebirdsql.jdbc.field.TypeConversionException: Error converting to date.
at org.firebirdsql.jdbc.field.FBField.setDate(FBField.java:722)
at org.firebirdsql.jdbc.AbstractPreparedStatement.setDate(AbstractPreparedStatement.java:318)
Já tentei converter a data em String para usar o Date.valueOf(String s) mas, mesmo assim a exceção é lançada.
Alguém já passou por isso e conseguiu resolver via JDBC?
Raphael Peret
Curtidas 0
Respostas
Raphael Peret
06/02/2019
Olá a todos.
Estou enfrentando problemas ao tentar fazer algo parecido com o seguinte:
Ao executar o setDate do PreparedStatement, é lançada a seguinte exceção:
org.firebirdsql.jdbc.field.TypeConversionException: Error converting to date.
at org.firebirdsql.jdbc.field.FBField.setDate(FBField.java:722)
at org.firebirdsql.jdbc.AbstractPreparedStatement.setDate(AbstractPreparedStatement.java:318)
Já tentei converter a data em String para usar o Date.valueOf(String s) mas, mesmo assim a exceção é lançada.
Alguém já passou por isso e conseguiu resolver via JDBC?
Estou enfrentando problemas ao tentar fazer algo parecido com o seguinte:
private final String INSERT = "insert into tabela (datacompra) values (?);" // LocalDate d = LocalDate.now(); PreparedStatement pstm = con.prepareStatement(INSERT); pstm.setDate(Date.valueOf(d)); // <- aqui lança a exceção pstm.executeUpdate();
Ao executar o setDate do PreparedStatement, é lançada a seguinte exceção:
org.firebirdsql.jdbc.field.TypeConversionException: Error converting to date.
at org.firebirdsql.jdbc.field.FBField.setDate(FBField.java:722)
at org.firebirdsql.jdbc.AbstractPreparedStatement.setDate(AbstractPreparedStatement.java:318)
Já tentei converter a data em String para usar o Date.valueOf(String s) mas, mesmo assim a exceção é lançada.
Alguém já passou por isso e conseguiu resolver via JDBC?
Tentei editar mas não encontrei a opção. O exemplo de código correto é:
private final String INSERT = "insert into tabela (datacompra) values (?);" // LocalDate d = LocalDate.now(); PreparedStatement pstm = con.prepareStatement(INSERT); pstm.setDate(1, Date.valueOf(d)); // <- aqui lança a exceção pstm.executeUpdate();
Havia esquecido o parâmetro do índice. A exceção é a mesma.
GOSTEI 0
Marcio Souza
06/02/2019
Sua instrução está correta. O problema deve ser com o Firebird.Tente trocar a versão do driver de conexão, talvez seja um bug na versão que está usando.
Ou então ele não trabalha com Date e sim como Timestamp. Nesse caso, teria que trocar sua data para timestamp.
Ou então ele não trabalha com Date e sim como Timestamp. Nesse caso, teria que trocar sua data para timestamp.
pstm.setTimestamp(1, Timestamp.valueOf(d));
GOSTEI 0
Raphael Peret
06/02/2019
Sua instrução está correta. O problema deve ser com o Firebird. Tente trocar a versão do driver de conexão, talvez seja um bug na versão que está usando.
Ou então ele não trabalha com Date e sim como Timestamp. Nesse caso, teria que trocar sua data para timestamp.
Ou então ele não trabalha com Date e sim como Timestamp. Nesse caso, teria que trocar sua data para timestamp.
pstm.setTimestamp(1, Timestamp.valueOf(d));
Obrigado pela resposta, Maurício.
Fiz o que você sugeriu. Tanto com um driver mais atual quanto com um mais antigo e, mesmo assim, o problema persiste. Também tentei converter em Timestamp e não deu certo (até porque o tipo de dado no banco realmente é um date mas, tentei a sorte).
Estava usando a versão 3.0.3 do Jaybird. Olhei no source do driver e acabei vendo que a implementação do método setDate apenas lança a exceção sem nem tentar configurar o valor passado no objeto. :-|
Se tiver alguma outra sugestão (que não envolva trocar a linguagem ou o banco), eu testo e posto o resultado. Enquanto isso, vou pesquisando outras alternativas também.
GOSTEI 0