Tipo de dados imcompativeis com PreparedStament

3 respostas
GuiiBarbosaa

Olá de novo galera, minha duvida agora é a seguinte: Eu estou gerando numeros no meu JComboBox que simulam os dias de 0…31, mes 0…12 e ano de 190…2012. Esses números são as opções de cadastro de data de aniversario do meu sistema, ao final eu concateno e os transformo em string so que quando eu vo enviar para o banco pelo PreparedStatement com o método setDate da incompatibilidade de dados alguém pode me ajudar ai?

os codigos:

final JComboBox cBDia = new JComboBox();
		cBDia.setModel(new DefaultComboBoxModel(new String[]{"Dia"}));
		
		for(int i = 1; i <= 31; i++){
			cBDia.addItem(i);
		}
		
		cBDia.setBounds(39, 368, 56, 20);
		panel2.add(cBDia);
		
		//Mes
		final JComboBox cBMes = new JComboBox();
		cBMes.setModel(new DefaultComboBoxModel(new String[] {"M\u00EAs"}));
		for(int i = 1; i <= 12; i++){
			cBMes.addItem(i);
		}
		
		cBMes.setBounds(105, 368, 56, 20);
		panel2.add(cBMes);
		
		//Ano
		final JComboBox cBAno = new JComboBox();
		for(int i = 1900; i <= 2012; i++){
			
		}
		cBAno.setModel(new DefaultComboBoxModel(new String[] {"Ano"}));
		for(int i = 1912; i <= 2012; i++){
			cBAno.addItem(i);
		}
		cBAno.setBounds(171, 368, 56, 20);
		panel2.add(cBAno);
		
		String dia = Integer.toString(cBDia.getSelectedIndex());
		String mes = Integer.toString(cBMes.getSelectedIndex());
		String ano = Integer.toString(cBAno.getSelectedIndex());
		
		String data = ""+dia+"/"+mes+"/"+ano+"";  // convertir os inteiros para string e os concatenei
                
                String query = "INSERT INTO testtable(datanasci) VALUES(?)";
                ConexaoDb db = new ConexaoDb();
                Connection conexao = db.getConexao();
                PreparedStatement pstm = conexao.preparedStatement(query);
               
                SimpleDateFormat dateformat = new SimpleDateFormat("dd/MM/yyyy");

                pstm.setDate(1, dateformat.format(data)); // O problema esta aqui

3 Respostas

A

Você está se confundindo com os tipos de dados.

//data é uma string
String data = ""+dia+"/"+mes+"/"+ano+"";  
                  
//o método format espera um Date (você está passando string) e retorna uma string
dateformat.format(data)
  
//o método setDate, espera um java.sql.Date e você está passando o resultado do format, que também é string!
pstm.setDate(1, dateformat.format(data)); // O problema esta aqui

O que você precisa fazer:

  • use o SimpleDateFormat para tansformar sua string “data” em um objeto Date (java.util.Date)

  • transforme seu objeto java.util.Date para um java.sql.Date

gustavocoolt
Date dataConvertida;

DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
formatter.setLenient(false); //não permite data inválida
dataConvertida = formatter.parse(dataString);

ai vc pode passar o Date direto

pstm.setDate(1, dataConvertida);
GuiiBarbosaa

Galera não consegui entender tipw eu tentei issu:

DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
			Date datanasci = new Date();
			
			datanasci = formatter.parse("15/06/1992"); //string de exemplo
			
			pstm.setDate(1, (java.sql.Date) datanasci);
			pstm.execute();
			pstm.close();
Criado 1 de novembro de 2012
Ultima resposta 7 de nov. de 2012
Respostas 3
Participantes 3