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:
[code]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;
}
}[/code]
abaixo está a classe DAO e o método que utiliza o PreparedStatement
[code]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);
}
}
[/code]
abaixo segue a classe principal que executará o código
[code]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!!");
}
}
[/code]
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? 