Date com JDBC

6 respostas
willianxwillian

Estou com um problema aqui:
Tenho esse código:

package pojo;

import java.util.Date;


public class Lancamento {
    private Long codigo;
    private Long codconta;
    private Date data;
    private String historico;
    private Double valor;

    public Long getCodigo() {
        return codigo;
    }

    public void setCodigo(Long codigo) {
        this.codigo = codigo;
    }

    public Long getCodconta() {
        return codconta;
    }

    public void setCodconta(Long codconta) {
        this.codconta = codconta;
    }

    public Date getData() {
        return data;
    }

    public void setData(Date data) {
        this.data = data;
    }

    public String getHistorico() {
        return historico;
    }

    public void setHistorico(String historico) {
        this.historico = historico;
    }

    public Double getValor() {
        return valor;
    }

    public void setValor(Double valor) {
        this.valor = valor;
    }
}
public void salvar(Lancamento lanc) throws SQLException{
        String sql = "insert into lancamentos(codconta,data,historico,valor)values(?,?,?,?)";
        pstm = conexao.prepareStatement(sql);
        pstm.setLong(1, lanc.getCodconta());
        pstm.setDate(2, lanc.getData()); // <------ erro aqui
        pstm.setString(3, lanc.getHistorico());
        pstm.setDouble(4, lanc.getValor());
        pstm.executeQuery();
        pstm.close();
    }

mas está dando esse erro:

no suitable method found for setDate(int,java.util.Date)
    method PreparedStatement.setDate(int,java.sql.Date,Calendar) is not applicable
      (actual and formal argument lists differ in length)
    method PreparedStatement.setDate(int,java.sql.Date) is not applicable
      (actual argument java.util.Date cannot be converted to java.sql.Date by method invocation conversion)

alguém pode me ajudar? Sou iniciante no Java.

6 Respostas

aix

tenta assim manu:

pstm.setDate(2, new java.sql.Date(lanc.getData()));
willianxwillian

aix:
tenta assim manu:

pstm.setDate(2, new java.sql.Date(lanc.getData()));

não funcionou

JARDEL_RODRIGUES

William acho que esse link resolve tua duvida.
um colega passou pela mesma situação;

java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime()); ps.setDate(4, sqlDate);

Read more: http://javafree.uol.com.br/topic-884971-Enviar-data-para-o-banco-de-dados.html#ixzz2L1pi4BHp
http://javafree.uol.com.br/topic-884971-Enviar-data-para-o-banco-de-dados.html

espero ter ajudado.

willianxwillian

Jardel.ads:
William acho que esse link resolve tua duvida.
um colega passou pela mesma situação;

java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime()); ps.setDate(4, sqlDate);

Read more: http://javafree.uol.com.br/topic-884971-Enviar-data-para-o-banco-de-dados.html#ixzz2L1pi4BHp
http://javafree.uol.com.br/topic-884971-Enviar-data-para-o-banco-de-dados.html

espero ter ajudado.

Valeu brother! Mas a data que vai ser lançada não é a data de hoje e sim a data de emissão do documento(ex: conta de luz Data de Emissão: 01/02/1999)

erico_kl
willianxwillian:
Valeu brother! Mas a data que vai ser lançada não é a data de hoje e sim a data de emissão do documento(ex: conta de luz Data de Emissão: 01/02/1999)
Mas onde está a data de hoje no código que foi passado? Ah, não esqueça de tratar NullPointer (caso você tenha o caso de gravar a data nula):
public void salvar(Lancamento lanc) throws SQLException{  
        String sql = "insert into lancamentos(codconta,data,historico,valor)values(?,?,?,?)";  
        pstm = conexao.prepareStatement(sql);  
        pstm.setLong(1, lanc.getCodconta());  
        pstm.setDate(2, lanc.getData() == null ? null : new java.sql.Date(lanc.getData().getTime()));  
        pstm.setString(3, lanc.getHistorico());  
        pstm.setDouble(4, lanc.getValor());  
        pstm.executeQuery();  
        pstm.close();  
}
ou
public void salvar(Lancamento lanc) throws SQLException{  
        String sql = "insert into lancamentos(codconta,data,historico,valor)values(?,?,?,?)";  
        pstm = conexao.prepareStatement(sql);  
        pstm.setLong(1, lanc.getCodconta());

        if (lanc.getData() == null)
             pstm.setNull(2, Types.DATE);
        else
             pstm.setDate(2, lanc.getData());  

        pstm.setString(3, lanc.getHistorico());  
        pstm.setDouble(4, lanc.getValor());  
        pstm.executeQuery();  
        pstm.close();  
}
mateusviccari

o seu problema é o seguinte:
Voce tem que passar por parametro um objeto do tipo java.sql.Date, cuidado poisé diferente de java.util.Date.
Se voce ja tem o seu java.util.Date em uma variavel minhaData, por exemplo, pra voce criar o seu java.sql.Date voce faz aassim:

java.sql.Date data = new java.sql.Date(minhaData.getTime());

E essa nova variavel data é que voce passa por parametro no método setDate do seu PreparedStatement.

Criado 16 de fevereiro de 2013
Ultima resposta 16 de fev. de 2013
Respostas 6
Participantes 5