Problema para salvar no banco

3 respostas
B

ola galera...
estou com um problema no meu codigo....

quando eu aciono o botão cadastrar.....ele não grava nada no banco e diz q a data é invalida..... ja mudei o geito da data e continua o erro .....segue o codigo logo abaixo ....c alguem pude me ajudar ....agradeço.
import java.sql.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.*;

class teste extends JFrame implements ActionListener
{
  JLabel jLabel1,jLabel2,jLabel3,jLabel4,jLabel5,jLabel6,jLabel7,
  jLabel8,jLabel9,jLabel10,jLabel11,jLabel12,jLabel13;
  JButton b1,b2,b3;
  static JTextField jTextFieldNome, jTextFieldEndereco, jTextFieldCidade, jTextFieldCEP, jTextFieldEstado,
  jTextFieldEmail, jTextFieldFone, jTextFieldDataNasc, jTextFieldNacionalidade, jTextFieldNaturalidade, jTextFieldRg, 
  jTextFieldCic;
  JPanel p1 = new JPanel();
  ResultSet rs;
  Statement MeuState;
    
  public static void main(String args[])
  {
   JFrame Janela = new teste();
   Janela.show();
   WindowListener x = new WindowAdapter()
    {
    public void windowClosing(WindowEvent e)
     {
      System.exit(0);
     }
    };
   Janela.addWindowListener(x);
  }
  
  teste()
  { 
	  jLabel1 = new JLabel();
      jLabel2 = new JLabel();
      jLabel3 = new JLabel();
      jLabel4 = new JLabel();
      jLabel5 = new JLabel();
      jLabel6 = new JLabel();
      jLabel7 = new JLabel();
      jLabel8 = new JLabel();
      jLabel9 = new JLabel();
      jLabel10 = new JLabel();
      jLabel11 = new JLabel();
      jLabel12 = new JLabel();
      jLabel13 = new JLabel();
      
      jTextFieldNome = new JTextField();
      jTextFieldEndereco = new JTextField();
      jTextFieldCidade = new JTextField();
      jTextFieldCEP = new JTextField();
      jTextFieldEstado = new JTextField();
      jTextFieldEmail = new JTextField();
      jTextFieldFone = new JTextField();
      jTextFieldDataNasc = new JTextField();
      jTextFieldNacionalidade = new JTextField();
      jTextFieldNaturalidade = new JTextField();
      jTextFieldRg = new JTextField();
      jTextFieldCic = new JTextField();
      
   p1.setLayout(null);
   
   jLabel1.setText("Cadastro de Discente");
   p1.add(jLabel1);
   jLabel1.setBounds(150, 10, 150, 23);
   
   jLabel2.setText("Nome:");
   p1.add(jLabel2);
   jLabel2.setBounds(30, 40, 160, 23);
   
   p1.add(jTextFieldNome);
   jTextFieldNome.setBounds(30, 60, 370, 27);
   
          
   jLabel3.setText("Rg:");
   p1.add(jLabel3);
   jLabel3.setBounds(30, 90, 20, 23);

   p1.add(jTextFieldRg);
   jTextFieldRg.setBounds(30, 110, 120, 27);
   
   
   jLabel4.setText("CIC:");
   p1.add(jLabel4);
   jLabel4.setBounds(165, 90, 30, 23);
   
   p1.add(jTextFieldCic);
   jTextFieldCic.setBounds(165, 110, 120, 27);
   

   jLabel5.setText("Data Nascimento:");
   p1.add(jLabel5);
   jLabel5.setBounds(300, 90, 100, 23);
   
   p1.add(jTextFieldDataNasc);
   jTextFieldDataNasc.setBounds(300, 110, 100, 27);
   

   jLabel6.setText("Endereço:");
   p1.add(jLabel6);
   jLabel6.setBounds(30, 140, 80, 23);
   
   p1.add(jTextFieldEndereco);
   jTextFieldEndereco.setBounds(30, 160, 370, 27);
   

   jLabel7.setText("Cidade:");
   p1.add(jLabel7);
   jLabel7.setBounds(30, 190, 48, 23);
   
   p1.add(jTextFieldCidade);
   jTextFieldCidade.setBounds(30, 210, 180, 27);
   

   jLabel8.setText("UF:");
   p1.add(jLabel8);
   jLabel8.setBounds(225, 190, 42, 23);
   
   p1.add(jTextFieldEstado);
   jTextFieldEstado.setBounds(225, 210, 30, 27);


   jLabel9.setText("CEP:");
   p1.add(jLabel9);
   jLabel9.setBounds(270, 190, 26, 23);
   
   p1.add(jTextFieldCEP);
   jTextFieldCEP.setBounds(270, 210, 130, 27);


   jLabel10.setText("Fone:");
   p1.add(jLabel10);
   jLabel10.setBounds(30, 240, 48, 23);
   
   p1.add(jTextFieldFone);
   jTextFieldFone.setBounds(30, 260, 120, 27);
   
   
   jLabel11.setText("E-mail:");
   p1.add(jLabel11);
   jLabel11.setBounds(165, 240, 50, 23);
   
   p1.add(jTextFieldEmail);
   jTextFieldEmail.setBounds(165, 260, 235, 27);
   
   
   jLabel12.setText("Naturalidade:");
   p1.add(jLabel12);
   jLabel12.setBounds(30, 290, 80, 23);
   
   p1.add(jTextFieldNaturalidade);
   jTextFieldNaturalidade.setBounds(30, 310, 370, 27);
   
   
   jLabel13.setText("Nacionalidade:");
   p1.add(jLabel13);
   jLabel13.setBounds(30, 340, 90, 23);
   
   p1.add(jTextFieldNacionalidade);
   jTextFieldNacionalidade.setBounds(30, 360, 370, 27);
  
   
   b1=new JButton("Novo");          
   b2=new JButton("Cadastrar");
   b3=new JButton("Cancelar");

   b1.setBackground(new Color(180,180,250));
   b2.setBackground(new Color(180,180,250));
   b3.setBackground(new Color(180,180,250));
 
   b1.addActionListener(this);
   b2.addActionListener(this);
   b3.addActionListener(this);
   
   p1.add(b2);
   b2.setBounds(160, 400, 110, 33);
   
   p1.add(b1);
   b1.setBounds(40, 400, 110, 33);
   
   p1.add(b3);
   b3.setBounds(280, 400, 110, 33);

   getContentPane().add(p1, java.awt.BorderLayout.CENTER);
   setTitle("Cadastramento de Discentes");
   setSize(430,480);
   setResizable(false);
   
   String url = "jdbc:odbc:datacena";  
   try 
       {
       Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
       Connection MinhaConexao = DriverManager.getConnection(url);
       MeuState = MinhaConexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
     	     ResultSet.CONCUR_READ_ONLY);
       rs = MeuState.executeQuery("SELECT * FROM Cadastro ORDER BY Nome"); 
       rs.first();
       atualizaCampos();
       } 
   catch(ClassNotFoundException ex)
       {
       System.out.println("Driver JDBC-ODBC não encontrado!");
       }
      catch(SQLException ex)
       {
       System.out.println("Problemas na conexao com a fonte de dados");
       }  
  }    

  public void actionPerformed(ActionEvent e)
   {
   	if (e.getSource()==b1)
   	  {
   	  limpaCampos();
   	  return;
   	  }
   	if (e.getSource()==b2)
   	  //inserir
   	  {
   	  try
   	   {
   		String SQL = "INSERT INTO Cadastro (Rg,Cic,Nome,Endereco"+
        "Cep,Cidade,Estado,Email,Telefone,Data_nascimento,Naturalidade,Nacionalidade) VALUES ('" +
     jTextFieldRg.getText() + "', '" + 
     jTextFieldCic.getText() + "', '" + 
     jTextFieldNome.getText() + "', '" + 
     jTextFieldEndereco.getText() + "', '" + 
     jTextFieldCEP.getText() + "', '" + 
     jTextFieldCidade.getText() + "', '" + 
     jTextFieldEstado.getText() + "', '" + 
     jTextFieldEmail.getText() + "', '" + 
     jTextFieldFone.getText() + "', '" +
     jTextFieldDataNasc.getText() + "', '" +
     jTextFieldNaturalidade.getText() + "', '" +
     jTextFieldNacionalidade.getText() + "')";
   	    MeuState.executeUpdate(SQL);
        JOptionPane.showMessageDialog(null,"Gravação realizada com sucesso!");
    	limpaCampos();
   	   
   	  }
   
     catch(SQLException ex)
      	{
      	 if (ex.getMessage().equals("General error")) 
      	 	JOptionPane.showMessageDialog(null,"Discente já Cadastrado");	
      	 else	
      	    JOptionPane.showMessageDialog(null,"Data Inválida");	
      	}
     
      } 
// ------------------ Final da Inclusão -------------------

   	if (e.getSource()==b3)
   	   //cancela
   	  {
   		setVisible(false);
        dispose();
      } 
// ------------------ Final da cancelamento -------------------
   	

  }	
  
  
  public static void limpaCampos()
  {
	  	 jTextFieldNome.setText("");
		 jTextFieldCEP.setText("");
		 jTextFieldCic.setText("");
		 jTextFieldEndereco.setText("");
		 jTextFieldRg.setText("");
		 jTextFieldCidade.setText("");
		 jTextFieldEstado.setText("");
		 jTextFieldEmail.setText("");
		 jTextFieldFone.setText("");
		 jTextFieldNacionalidade.setText("");
		 jTextFieldNaturalidade.setText("");
		 jTextFieldDataNasc.setText("");
  }	

  public void atualizaCampos()
  {
  try
   {
	  jTextFieldRg.setText(rs.getString("Rg"));
	  jTextFieldNome.setText(rs.getString("Nome"));
	  jTextFieldCic.setText(rs.getString("Cic"));
	  jTextFieldEndereco.setText(rs.getString("Endereco"));
	  jTextFieldCEP.setText(rs.getString("Cep"));
	  jTextFieldCidade.setText(rs.getString("Cidade"));
	  jTextFieldEstado.setText(rs.getString("Estado"));
	  jTextFieldEmail.setText(rs.getString("Email"));
	  jTextFieldFone.setText(rs.getString("Telefone"));
	  jTextFieldDataNasc.setText(""+rs.getString("Data_nascimento"));
	  jTextFieldNaturalidade.setText(rs.getString("Naturalidade"));
	  jTextFieldNacionalidade.setText (rs.getString("Nacionalidade"));
   }
  catch(SQLException ex)
   {  }
  } 
}

abraço :lol:

3 Respostas

timotta

Ao inves de utilizar MeuState, utilize o PreparedStatement de forma a não criar o SQL concatenando String e sim utilizando os curingas ? (interrogação) preenchidos com os métodos dessa classe.

otaviofcs

Só passar para preparedStatement não resolve seu caso. O seu problema é que você deve estar tentando passar uma data como: “20/04/2007” e o sql exige que a data seja no padrão aceito pelo banco de dados. 2 padrões funcionam: 2007/04/20 (yyyy/MM/dd) ou 04/20/2007 (MM/dd/yyyy). Isso pode ser formatado com um SimpleDateFormat. O preparedStatement facilitaria pois você só precisaria passar um objeto tipo data. Algo como:

pStmt.setDate(12,new SimpleDateFormat("dd/MM/yyyy").parse(jTextFieldDataNasc.getText());

No seu caso resolveria substituir:

new SimpleDateFormat("yyyy/MM/dd").format(new SimpleDateFormat("dd/MM/yyyy").parse(jTextFieldDataNasc.getText())) + "','";

Veja bem, escrevi tudo direto aqui e nem testei, mas só tô te dando um início de estudo. Depois tem que trabalhar isso melhor. Por exemplo: será que a data que estão preenchendo sempre virá no formato dd/MM/yyyy? Devo usar o preparedStatement? (essa última a resposta é sim:) ),…

Boa sorte nesse começo.

B

valew pela dica …

abraço

Criado 8 de fevereiro de 2007
Ultima resposta 9 de fev. de 2007
Respostas 3
Participantes 3