JCalendar e Mysql

1 resposta
L

Pessoal estou precisando de um ajuda. Estou criando um formulário para trabalhar com data utiliznado Mysql e o objeto JCalendar. Criei uma classe para receber as instruções sql e nela tenho o seguinte código:`

public void adiciona (Consultas c1) throws SQLException { 

    String sql="insert into consultas (codm,codp,data,valor) value(?,?,?,?)"; 
    PreparedStatement stmt= conecta.prepareStatement(sql);
    stmt.setDate(3, new java.sql.Date(c1.getDataconsulta().getTime()));
    stmt.setInt(1,c1.getCodm()); stmt.setInt(2,c1.getCodp());
    stmt.setDouble(4,c1.getValor()); stmt.execute(); stmt.close();
}

No formulário inserir um objeto JDateChooser e outros JtextField, e criei o método abaixo:

private void Cadastro() { 
 try {

    Consultas c1 = new Consultas(); c1.setCodm(Integer.parseInt(txtcodm.getText()));
    c1.setCodp(Integer.parseInt(txtcodp.getText()));
    c1.setDataconsulta(jdata.getDate());
    c1.setValor(Double.parseDouble(txtvalor.getText())); 
    MANUTENCAO Dados = new MANUTENCAO(); 
    Dados.adiciona(c1); }
catch (SQLException ex) { 
     JOptionPane.showMessageDialog(null,"problema na inserção"+ex);
}

porém está apresentando erro de conversão dojava.util.date ejava.sql.date na linha c1.setDataconsulta(jdata.getDate()); Já tentei utilizar o classe SimpleDateFormat mas nada …

Como resolver?

1 Resposta

Dragoon

Para que você consiga êxito siga o caminho abaixo, utilize java.sql.Date.valueOf com o formato ano-mes-dia (YYYY-MM-DD).

Importe:

import java.sql.Date

Classe:

package Classes;
import java.sql.Date;
public class Funcionario {
    
    private long id;
    private String nome;
    private Date data;
    
    public Funcionario() {
    }
    public Funcionario(String nome, Date data) {
        this.nome = nome;
        this.data = data;
    }
    public Funcionario(long id, String nome) {
        this.id = id;
        this.nome = nome;
    }    
    public Funcionario(long id, String nome, Date data) {
        this.id = id;
        this.nome = nome;
        this.data = data;
    }
    public long getId() {
        return id;
    }
    public Funcionario setId(long id) {
        this.id = id;
        return this;
    }
    public String getNome() {
        return nome;
    }
    public Funcionario setNome(String nome) {
        this.nome = nome;
        return this;
    }      
    public Date getData() {
        return data;
    }
    public void setData(Date data) {
        this.data = data;
    }
}

Seu campo privado:

private Date data;

Encapsulamento:

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

Para gravar

Funcionario funcionario = new Funcionario("GUJ", java.sql.Date.valueOf("1999-02-28"));

Método insert

public Funcionario insert(Funcionario model) {        
	try {
		PreparedStatement st = connection
				.prepareStatement("INSERT INTO funcionario(nome,data) values(?, ?)", true);            
		st.setString(1, model.getNome());            
		st.setDate(2, model.getData());
		if (st.executeUpdate() > 0) {
			try (ResultSet res = st.getGeneratedKeys()) {
				if (res.next()){
					model.setId(res.getInt(1));
					res.close();
					st.close();
					return model;
				}
			}
			st.close();
		}            
	} catch (SQLException | ClassNotFoundException ex) {
		Logger.getLogger(DalFuncionario.class.getName()).log(Level.SEVERE, null, ex);
	}
	return null;
}

Ou seja, passe uma data no formato que é invertido (Ano, Mês e Dia (YYYY-MM-DD)), para
java.sql.date.valueOf("1999-01-01") que o banco receberá o dado convertido corretamente para gravação.

Explicação do método:

public static Date valueOf(String s)
       Converts a string in JDBC date escape format to a Date value.
Parâmetros:
       s - a String object representing a date in in the format "yyyy-[m]m-[d]d". The leading zero for mm and dd may also be omitted. 
Retorna:
       a java.sql.Date object representing the given date 
Gera:
       IllegalArgumentException - if the date given is not in the JDBC date escape format (yyyy-[m]m-[d]d)
Criado 26 de julho de 2016
Ultima resposta 26 de jul. de 2016
Respostas 1
Participantes 2