Acesso Banco de Dados. ajuda

Olá.

O que está acontecendo é o seguinte o programinha grava normalmente no banco de dados Access.

com o primeiro item sendo o Codigo, tipo numero funciona normal.
Se eu adiciono outros campos textos tipo estado, país, nacionalidade. armazena normal.
mas basta eu colocar algum campo do tipo numero… que da erro na gravação. ( exceto o campo codigo). o que pode estar havendo. vou deixar o codigo com o erro.

class TelaCadastro extends JFrame implements ActionListener
{
     JTextField campoCodigo; JTextField campoNome;  JTextField campoCidade;
     JTextField campoEquipe;  JTextField campoCpf;
     JLabel Codigo; JLabel Nome; JLabel Cidade; JLabel Equipe;
     JLabel Cpf;
     JLabel Lbl1;   JLabel Lbl6;  JLabel Lbl11;  JLabel Lbl16;
     JLabel Lbl2;   JLabel Lbl7;  JLabel Lbl12;  
     JLabel Lbl3;   JLabel Lbl8;  JLabel Lbl13;  
     JLabel Lbl4;   JLabel Lbl9;  JLabel Lbl14; 
     JLabel Lbl5;   JLabel Lbl10; JLabel Lbl15;  
     JButton btnOk; JButton btnCons;

     ResultSet rs; //Variavel resultset recebe o resultado de um select
     Statement MeuState; 
     String url = "jdbc:odbc:bancoDados"; 

    public TelaCadastro() {
        setTitle("Cadastro de Cliente");
        campoCodigo   = new JTextField();
        campoNome     = new JTextField();
        campoCidade   = new JTextField();
        campoEquipe   = new JTextField();
        campoCpf      = new JTextField();
        Codigo        = new JLabel("Codigo");
        Nome          = new JLabel("Nome");
        Cidade        = new JLabel("Cidade");
        Equipe        = new JLabel("Equipe");
        Cpf           = new JLabel("Cpf");

        Lbl1  = new JLabel("");    Lbl2  = new JLabel("");  Lbl3  = new JLabel(" "); Lbl4  = new JLabel("");
        Lbl5  = new JLabel("");    Lbl6  = new JLabel("");  Lbl7  = new JLabel("");  Lbl8  = new JLabel("");
        Lbl9  = new JLabel("");    Lbl10 = new JLabel("");  Lbl11 = new JLabel("");  Lbl12 = new JLabel("");
        Lbl13 = new JLabel("");    Lbl14 = new JLabel("");  Lbl15 = new JLabel("");  Lbl16 = new JLabel("");
        btnOk = new JButton("Ok"); btnCons = new JButton("Consultar");
        btnOk.addActionListener(this);
        btnCons.addActionListener(this);

        Connection MinhaConexao;  

        try{
           Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // carrega o driver que será utilizado na conexão
           MinhaConexao = DriverManager.getConnection(url);   //Estabele uma conexao chamada MinhaConexao
           MeuState = MinhaConexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);//Possibilita
           // a navegação o o recordse sendo permito somente a leitura
        }
        catch(ClassNotFoundException ex){
         	JOptionPane.showMessageDialog(null,"Driver Não encontrado");
        }
        catch(SQLException ex){
         	JOptionPane.showMessageDialog(null,"Problemas na conexão");
        }
    }

    public void actionPerformed(ActionEvent e){
    	//Inclui
    	if (e.getSource()== btnOk){
      		try{
      			   String sql= "insert into tabelaBD (Codigo, Nome, Cpf, Cidade, Equipe) values (?, ?, ?, ?, ?)";    
      
                   PreparedStatement pstmt = MinhaConexao.prepareStatement(sql);  
      
                   pstmt.setInt(1, Integer.parseInt(campoCodigo.getText()));   
                   pstmt.setString(2, campoNome.getText());   
                   pstmt.setString(3, campoCpf.getText());  
                   pstmt.setString(4, campoCidade.getText());   
                   pstmt.setString(5, campoEquipe.getText());  
      
                   pstmt.executeUpdate();  
        	
          	    JOptionPane.showMessageDialog(null, "Registro gravado com sucesso");

      		}
     		catch(SQLException ex)
      		{
      			JOptionPane.showMessageDialog(null, "Erro na gravação");
      		}
     	}

		//Consulta
    	if (e.getSource()== btnCons){
      		try{
        		String SQL = "Select * From tabelaBD Where Codigo = " + Integer.parseInt(campoCodigo.getText());
         		rs = MeuState.executeQuery(SQL);
         		rs.first();
         		AtualizaCampos();
      		}
     		catch(SQLException ex)
      		{
      				JOptionPane.showMessageDialog(null,ex, "Cabeçaho  Pergunta1", JOptionPane.INFORMATION_MESSAGE);
      		}
     	}
    }

    public void AtualizaCampos(){
    	try{
    		campoNome.setText(rs.getString("Nome"));
    		campoCidade.setText(rs.getString("Cidade"));
    		campoEquipe.setText(rs.getString("Equipe"));
    	
    	}
    	catch(SQLException ex){
    		JOptionPane.showMessageDialog(null, "Registro não encontrado");
    	}
    }

    private void mostrarTela() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//Sair definitivamente ao clicar o X
        setLocation(150, 300);
        setSize(300, 250);
        setLayout(new GridLayout(2, 1));
        Container cp = getContentPane();

        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(6, 4));
        panel.add(Lbl1);  panel.add(Codigo);  panel.add(campoCodigo);   panel.add(Lbl2);
        panel.add(Lbl3);  panel.add(Nome);    panel.add(campoNome);     panel.add(Lbl4);
        panel.add(Lbl11);  panel.add(Cpf);     panel.add(campoCpf);      panel.add(Lbl12);
        panel.add(Lbl5);  panel.add(Cidade);  panel.add(campoCidade);   panel.add(Lbl6);
        panel.add(Lbl9);  panel.add(Equipe);  panel.add(campoEquipe);   panel.add(Lbl10);
        panel.add(Lbl7);  panel.add(btnOk);   panel.add(btnCons);       panel.add(Lbl8); 
        cp.add(panel);
        setVisible(true);
 }

    public static void main(String[] args) {
        TelaCadastro executar = new TelaCadastro();
        executar.mostrarTela();
    }
}

Obrigado

Em primeiro lugar não percebo como é que se pode usar banco de dados e Access na mesma frase… :slight_smile:

Depois, deves ter em atenção as convenções para JAVA.

Finalmente, deves usar PreparedStatement e não Statement para efectuares as queries. Em vez daquela coisa confusa que tens entre as linhas 57 e 63, deverias ter:

String sql= "insert into tabelaBD (Codigo, Nome, Cpf, Cidade, Equipe) values (?, ?, ?, ?)";  

PreparedStatement pstmt = minhaConexao.prepareStatement(sql);

pstmt.setInt(1, Integer.parseInt(campoCodigo.getText())); 
pstmt.setString(2, campoNome.getText()); 
pstmt.setString(3, campoCpf.getText());  // porque tinhas int? vais fazer contas com ele?
pstmt.setString(4, campoCidade.getText()); 
pstmt.setString(5, campoEquipe.getText());

pstmt.executeUpdate(); 

Então estou lendo aqui sobre o preparedStatement. é realmente melhor. só que ta dando um erro não ta achando a MinhaConexao. tem que declarar?

cannot find symbol
symbol : variable MinhaConexao
location: class TelaCadastro
PreparedStatement pstmt = MinhaConexao.prepareStatement(sql);

Você precisa declarar o MinhaConexao fora do bloco try, do mesmo jeito que fez com o Statement MeuState.

Declarar assim?

PreparedStatement pstmt = MinhaConexao.prepareStatement(sql);

[quote=Cannigia90]Declarar assim?

PreparedStatement pstmt = MinhaConexao.prepareStatement(sql);[/quote]

Isso é declarar e instanciar ao mesmo tempo.

na linha 41 do seu código você tem isso:

Connection MinhaConexao = DriverManager.getConnection(url);

O que acontece… você declara um objeto Connection chamando de MinhaConexao e instancia-o com o retorno de DriverManager.getConnection(url)… Só que o objeto declarado dentro do bloco try só existe dentro dele. Para resolver o problema você precisa apenas declarar o MinhaConexao FORA do bloco try. Sugiro que faça isso depois da linha 17, acrescentando isso:

Connection MinhaConexao;

E então… sua linha 41 altere para isso:

MinhaConexao = DriverManager.getConnection(url);

Continua mesmo erro na linha 60.

Cannot find symbol
symbol : variable MinhaConexao
location: class TelaCadastro
PreparedStatement pstmt = MinhaConexao.prepareStatement(sql);
^

já tentei de tudo e não vai…

A tua conexão deve estar declarada na class e não num método (ali pela linha 15 em vez de ser pela 39).

Agora conseguiu adicionar perfeitamente…

Agradeço a todos.

Outra duvida aqui… tava tentando adicionar um botão limpar só que não consegui… tentei desse jeito.

if (e.getSource() == btnLimpar){  
             try {  
              campoCodigo.setText("");     
                campoNome.setText("");   
                campoCpf.setText("");   
                campoCidade.setText("");   
                campoEquipe.setText("");   
             }    
                catch(SQLException ex)  
                {  
                   JOptionPane.showMessageDialog(null, "Erro ao Limpar");  
      
                }  
      
          }  

alguém sabe algum caminho?