Erro ao enviar datas no JDBC e SQL Server

2 respostas
P

Olá, estou criando um banco de dados simples, só para exercício mesmo, utilizando o [color=blue]sql server[/color] e o JDBC. aparentemente esta funcionando direito, porém percebi que ao inserir uma data, o mês enviado é diferente do mês digitado, exemplo: se eu digitar 2012-09-07 (ano, mes, dia), o valor enviado ao BD será 2012-10-07! abaixo segue o código simplificado. e comentários:

public class Funcionario {

    private Calendar dataNasc;

    public void setDataNasc(int ano, int mes ,int dia) {
        dataNasc=Calendar.getInstance();
        dataNasc.set(ano, mes, dia);// metodo formata os inteiros como data
    }
	
	    public Calendar getDataNasc(){
        return dataNasc;
	}

    }

abaixo está a classe DAO e o método que utiliza o PreparedStatement

private Connection connection;
    
    public FuncionarioDAO(){
        this.connection= new ConnectionFactory().getConnection();
}
    public void adiciona(Funcionario funcionario){
        String sql="insert into Funcionario(DataNascimento)values(?)";
                
        try{
           //prepared statement para a inserção
            PreparedStatement smt= connection.prepareStatement(sql);
            //seta os valores
           
            smt.setDate(1, new java.sql.Date(funcionario.getDataNasc().getTimeInMillis()));
     
            //executa stmt
            smt.execute();
            smt.close();
            
            System.out.println("GRAVADO!");
            connection.close();
        }catch(SQLException e){
            throw new RuntimeException(e);
            
        }
        
    }

abaixo segue a classe principal que executará o código

public class InseriDadosEmpresaX {

    public static void main(String[] args) {
        
        //instanciando a clase 
      Funcionario funcionario= new Funcionario();
      
      //inserindo os contatos  
     funcionario.setDataNasc(1970,2,28);//veja que aqui inseri a data 28/02/1970
      //grave nessa conexao
     FuncionarioDAO  dao= new FuncionarioDAO();
     
     dao.adiciona(funcionario);
	
     System.out.println("GRAVADO!!");
      
    }
}

ao aplicar um select, seja via java ou no sql server mesmo, a data mostrada será : 28/03/1970, isto é, o programa envia sempre o mês posterior a data lançada.
alguém poderia me ajudar? :cry:

2 Respostas

pmlm

http://docs.oracle.com/javase/6/docs/api/java/util/Calendar.html#set%28int,%20int,%20int%29

P

Valeu, já que o mês começa a partir do zero, só foi preciso colocar um incremento negativo na variável mes do classe funcionario.

Criado 7 de setembro de 2012
Ultima resposta 8 de set. de 2012
Respostas 2
Participantes 2