Problema com um update simples, como fazer o jButton fazer o update

6 respostas
rafaelviny

alguem da uma luz, acho q o problema ta no action q eu nao to muito bom =/

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.sql.*;
import java.sql.PreparedStatement.*;

public class Menu extends JFrame implements ActionListener {

  MeuJTextField mjtfCodigo   = new MeuJTextField(20,true);
  MeuJTextField mjtfNome     = new MeuJTextField(20,true);
  MeuJTextField mjtfEndereco = new MeuJTextField(20,false);
  JButton jbOK = new JButton("OK");
  JButton jbCancela = new JButton("Cancelar");
  
  
  Connection con;
  
  public static void main (String args[]) {
     Menu menu = new Menu();

  }
  public Menu() {
     getContentPane().setLayout(new GridLayout(4,4));
     getContentPane().add(new JLabel("Codigo:"));
     getContentPane().add(mjtfCodigo);
     getContentPane().add(new JLabel("Nome:"));
     getContentPane().add(mjtfNome);
     getContentPane().add(new JLabel("Endereco:"));
     getContentPane().add(mjtfEndereco);
     getContentPane().add(jbOK);
     getContentPane().add(jbCancela);
     setSize(300,150);
     setVisible(true);
  }

  public void actionPerformed(ActionEvent e) {
          
      
        try {
            Class.forName("org.firebirdsql.jdbc.FBDriver");
            con = DriverManager.getConnection("jdbc:firebirdsql:localhost:C:\\TESTE.GDB","SYSDBA","masterkey");
            PreparedStatement ps = con.prepareStatement("insert into cliente values(?,?,?)");
            
            ps.setInt(1,Integer.parseInt(mjtfCodigo.getText()));
            ps.setString(2,mjtfNome.getText());
            ps.setString(3,mjtfEndereco.getText());
            
             if (e.getSource() == jbOK){
                ps.executeUpdate();
                JOptionPane.showMessageDialog(this,"Query executada com sucesso");
                
            }
            
             if (e.getSource() == jbCancela){
                
            }
            
            
            
            con.close();
        }
        catch(Exception event){
              JOptionPane.showMessageDialog(null,"Conexão não estabelecida ","Vifique o sistema",JOptionPane.ERROR_MESSAGE);
         }
      



 }


class MeuJTextField extends JTextField implements FocusListener {

  private boolean obrigatorio = false;

  public MeuJTextField(int tamanho, boolean obrigatorio) {
     super(tamanho);
     this.obrigatorio = obrigatorio;
     if (obrigatorio)
        setBackground(Color.yellow);
      else
        setBackground(Color.white);
     addFocusListener(this);
  }

  public void focusGained(FocusEvent e) {
     setBackground(Color.orange);
  }

  public void focusLost(FocusEvent e) {
     if (obrigatorio)
        setBackground(Color.yellow);
      else
        setBackground(Color.white);
  }
}

class MeuPainelComboBox extends JPanel {

  private JComboBox jcb = new JComboBox();


  public MeuPainelComboBox() {
     super();
     setLayout(new GridLayout(1,2));
     add(jcb);
     
  }
}
}

6 Respostas

Andre_Fonseca

posta o erro…

rafaelviny

ai q ta o problema

nao tem erro

oO

so nao faz o update na hora de precionar jbOK

rafaelviny

ops

esqueci de add o jbOK ao actionListener

sorry :oops:

caio_ferreira

eai, faz o seguinte, cria uma classe e faz todos os metodos para conectar no banco, desconectar atualizar, consultar, remover. Ai estou fazendo a conexão e a atualização.

import java.sql.*;

public class ClienteBD {
    // variável que representa a conexão com o banco
    Connection conexao;
    // variável que representa um canal para execução
    // de comandos SQL
    Statement canal;
      
    public ClienteBD()
    {
        
    }
    
    //conectar com o banco de dados
        public int conecta(){
        try {
            // carrega o driver JDBC do MySQL
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            // define o endereço do banco de dados
            String url = "jdbc:mysql://localhost/Cliente";
            String user = "usuario";
            String pass = "senha";
            // cria a conexão
            conexao = DriverManager.getConnection(url, user, pass);
            return 1;
            }
            catch(Exception e)
            {
                System.out.println(e.getMessage());
                return 0;
            }

    }
        
    public int atualiza(String sql){
        try{
            // cria canal de comunicação para exec. SQL
            canal = conexao.createStatement();
            // executa comando de inserção
            canal.executeUpdate(sql);
            return 1; //com sucesso
        }
        catch(Exception e){
            System.out.println(e.getMessage());
            return 0;//sem sucesso
        }
    }
}

Ai vc cria seus Frames em outro arquivo e usa esses metodos, acho q fica mais facil…

ai vc utiliza desse jeito na action do botão.

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
// TODO adicione seu código de manipulação aqui:
        ClienteBD conexao = new ClienteBD();
        // faz conexao
        if (conexao.conecta() == 1){
          String sql;
          sql = "update dados set codigo = " + codigo.getText() +
          ", nome = '" + nome.getText() + 
          "', endereco = '" + endereco.getText() +
          "', aniversario = '" + aniversario.getText() +
          "', idade = " + idade.getText() +
          ", peso = " + peso.getText() + 
          " where codigo = " + codigo.getText();
          if (conexao.atualiza(sql) == 1)
              JOptionPane.showMessageDialog(null, "Atualização com sucesso");
          else 
              JOptionPane.showMessageDialog(null, "Atualização com problemas");
        }
        else 
            JOptionPane.showMessageDialog(null,"Problemas na conexao");
    }

acho q é isso ai, tbm nao sei muita coisa nao, to começando a estudar agora.

Andre_Fonseca

Oi,

Tenta mudar o seu método atualiza assim

public int atualiza(String sql){ int result; try{ // cria canal de comunicação para exec. SQL canal = conexao.createStatement(); // executa comando de inserção result = canal.executeUpdate(sql); } catch(Exception e){ System.out.println(e.getMessage()); result = -1; } return result; }

Neste caso ele vai retornar !=0 se sucesso, 0 se não encontrou o registro e -1 se erro

Depois você muda o seu método jButton2ActionPerformed assim:

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { // TODO adicione seu código de manipulação aqui: ClienteBD conexao = new ClienteBD(); // faz conexao if (conexao.conecta() == 1){ String sql; sql = "update dados set codigo = " + codigo.getText() + ", nome = '" + nome.getText() + "', endereco = '" + endereco.getText() + "', aniversario = '" + aniversario.getText() + "', idade = " + idade.getText() + ", peso = " + peso.getText() + " where codigo = " + codigo.getText(); int resultadoAtualiza = conexao.atualiza(sql); if (resultadoAtualiza == 0) { JOptionPane.showMessageDialog(null, "Nenhum registro atualizado"); } else if (resultadoAtualiza < 0) { JOptionPane.showMessageDialog(null, "Atualização com sucesso"); } else { JOptionPane.showMessageDialog(null, "Atualização realizada com sucesso"); } } else JOptionPane.showMessageDialog(null,"Problemas na conexao"); }

Qual mensagem o jButton2ActionPerformed mostra ??

Depois eu sugiro você a dar uma lida no tutorial do GUJ que te ensina a usar o PreparedStatement, para ficar mais fácil você escrever o seu SQL

Abs

rafaelviny

to atras de aprender PreparedStatement

acho mais organizado

Criado 22 de agosto de 2008
Ultima resposta 26 de ago. de 2008
Respostas 6
Participantes 3