[Resolvido] Atualizar banco em tempo de execução

7 respostas
D

olá a todos;

NetBeans/Java e MySQL

Estou criando um aplicativo, e já fiz o basico INSERIR, DELETAR, PESQUISAR, ALTERAR e NAVEGAR |< < > >| , todavia quando por exemplo deleto um registro, é deletado do banco mas para eu ver que foi deletado tenho que sair e entrar no programa, ou seja, nada é atualizado em tempo de execução, como faço para quando deletar seja em tempo de execução? Tb quando insiro um novo registro, não e uso os botoes de navegação eu os vejo apenas quando saiu e entro no programa.

7 Respostas

Hebert_Coelho

Se você consegue executar a operação sem erro seu problema está em atualizar a tela do usuário e não na persistência das informações.

Como você exibe as informações para o usuário?

D

Atraves de jTextFields

A

o que o jakefrog quis perguntar foi algo do tipo: se você tem os botões para navegar entre registros, isso sugere que você está operando com um conjunto, ok ? Esse conjunto seria um List, um Array, ou o que? Porque o que está te faltando é atualizar a informação neste conjunto, compreende?

D

É o seguinte;
Como é a primeira vez que uso SQL, estou apenas fazendo alguns testes, o que fiz foi o seguinte:

Tenho 1 jTextField onde escrevo e outro jTextField onde vejo os registros;
Tenho 1 botão GRAVAR, 1 DELETAR, E mais 4 Botoes (avançar, retroceder, ultimo e primeiro registros)

Gravo usando INSERT INTO

Deleto usando DELETE FROM

e (vamos ater ao avançar e retroceder)

Avanço usando SELECT * FROM  e depois dou next()

retrocedo usando SELECT * FROM  e depois dou previous()

Tudo funciona, mas apenas em tempo de compilação, ex:
Entro no aplicativo, cadastro 10 registros, não consigo navegar < > . Saio do aplicativo, volto e navego normalmente, escolho um registro e deleto, ele ainda continua ali, no meu aplicativo. Saio do aplicativo e vejo no banco que o registro foi deletado corretamente, volto para o aplicativo e tá certo. Ou seja, o que devo fazer para que tudo aconteça em tempo de execução? É algo no codigo SQL ou algo para atualizar o textField, ja tentei algo como repaint, revalidate e removeAll() para o delete, e nada.

A

Certo colega…
Poste o seu código pra galera entender melhor e a resposta com certeza aparecerá

D

Descupem pela demora, tive problemas com meu pc. Seque codigo compilavém (NETBEANS).

SQl (simples, apenas para meus testes. )

USES meu_conector_mysql;
CREATE TABLE tab_teste(
    nome VARCHAR(60) NOT NULL
);

Programa

/*Bibliotecas*/
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.util.Vector;

// Classe Principal.
public class Principal extends JFrame implements ActionListener{
    // Declaração dos atributos da classe.
    private JPanel     JPanel_PainelSuperior;
    private JPanel     JPanel_PainelInferior;
    private JButton    JButton_Anterior;
    private JButton    JButton_Proximo;
    private JButton    JButton_Gravar;
    private JTextField jTextField_Entrada;
    private JTextField jTextField_Saida;
    
   
    // Instanciando objetos.
    Cadastrar objCad = new Cadastrar();
    NavegarRegistros objNavReg = new NavegarRegistros();
    //Vector meuVetor = new Vector(); 
    
    // Metodo Principal.
    public static void main(String[] args) {
        
        // Criando janela.
        Principal janela = new Principal();
        janela.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        janela.setSize(450, 250);
        janela.setResizable(false);
        janela.setVisible(true);
        
    }
    
    // Construtor.
    public Principal() {
        // Chamando metódos.
        iniciarComponentes();
        iniciarConteiners();
    
    }
    
    // Metódo para instanciar e iniciar os componentes.
    private void iniciarComponentes() {
        
        // Instanciando componentes.
        JPanel_PainelSuperior = new JPanel();
        JPanel_PainelInferior = new JPanel();
        JButton_Anterior      = new JButton();
        JButton_Proximo       = new JButton();
        JButton_Gravar        = new JButton();
        jTextField_Entrada    = new JTextField();
        jTextField_Saida      = new JTextField(); 
        
        // Propriedades dos componentes.
        JPanel_PainelSuperior.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
        JPanel_PainelInferior.setBorder(BorderFactory.createEtchedBorder());
        JButton_Anterior.setText("<");
        JButton_Proximo.setText(">");
        JButton_Gravar.setText("Gravar");
        jTextField_Saida.setBackground(SystemColor.info);
        jTextField_Saida.setEditable(false);
        
        // Ações para os botões.
        JButton_Gravar.addActionListener(this);
        JButton_Proximo.addActionListener(this);
        JButton_Anterior.addActionListener(this);
    
    }// Fim metodo iniciarComponentes.


    // Metódo para instanciar e iniciar os conteiners.
    private void iniciarConteiners() {
        
        // Conteiner para paineis.
        GroupLayout paginador = new GroupLayout(getContentPane());
        getContentPane().setLayout(paginador);
        
        paginador.setHorizontalGroup(
            paginador.createParallelGroup().addComponent(JPanel_PainelSuperior)
            
            .addGroup(paginador.createSequentialGroup()
            .addGap(20, 20, 20).addComponent(JPanel_PainelInferior).addGap(20, 20, 20))
            
        );
        paginador.setVerticalGroup(
            paginador.createSequentialGroup().addComponent(JPanel_PainelSuperior)
            .addGap(20, 20, 20).addComponent(JPanel_PainelInferior).addGap(20, 20, 20)  
        );
        
        // Conteiner painel para botões.
        GroupLayout jPanel1_paginador = new GroupLayout(JPanel_PainelSuperior);
        JPanel_PainelSuperior.setLayout(jPanel1_paginador);
        
        jPanel1_paginador.setHorizontalGroup(
            jPanel1_paginador.createSequentialGroup().addGap(16, 16, 16)//aumentando distância esquerda.
            .addComponent(JButton_Anterior)
            .addComponent(JButton_Proximo)
               
            //Maximo lado direito.
            .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED,0, Short.MAX_VALUE)
            .addComponent(JButton_Gravar)
            .addGap(18, 18, 18)//reduzindo distância direita.
        );
        jPanel1_paginador.setVerticalGroup(
            jPanel1_paginador.createParallelGroup()
            .addComponent(JButton_Anterior)
            .addComponent(JButton_Proximo)
            .addComponent(JButton_Gravar)
        );
    
        // Conteiner painel para as caixas de texto.
        GroupLayout jPanel2_paginador = new GroupLayout(JPanel_PainelInferior);
        JPanel_PainelInferior.setLayout(jPanel2_paginador);
        
        jPanel2_paginador.setHorizontalGroup(
            jPanel2_paginador.createParallelGroup()
            // Para o adddGap fazer efeito.
            .addGroup(jPanel2_paginador.createSequentialGroup()
            .addGap(25, 25, 25)//Espaço das caixas à esquerda.
            
            // Para as caixas ficarem paralelas uma em baixo da outra.
            .addGroup(jPanel2_paginador.createParallelGroup()
            .addComponent(jTextField_Entrada)
            .addComponent(jTextField_Saida))
            .addGap(25, 25, 25))//Espaço das caixas à direita.
                     
        );
        jPanel2_paginador.setVerticalGroup(
            jPanel2_paginador.createParallelGroup()
            .addGroup(jPanel2_paginador.createSequentialGroup()
                .addGap(35, 35, 35)//Espaço das caixas à cima.
                .addComponent(jTextField_Entrada)
                .addGap(40, 40, 40)//Espaço das caixas à baixo.
                .addComponent(jTextField_Saida)
                //Normalizar altura das caixas.
                .addContainerGap(30, Short.MAX_VALUE)
            )
        );
       
        pack();
    }// Fim metodo iniciarConteiners.

    /*Metodo da interface ActionListener*/
    public void actionPerformed(ActionEvent evento) {
        
        // Evento ao clicar botão gravar.
	if(evento.getSource() == JButton_Gravar){
            // Chamando metódos.
            objCad.setNome(jTextField_Entrada.getText());
            objCad.gravar();
            
        }
        // Evento ao clicar botão avançar.
	if(evento.getSource() == JButton_Proximo){
            // Chamando metódo.
            objNavReg.proximoReg();
            
        }
        // Evento ao clicar botão retroceder.
	if(evento.getSource() == JButton_Anterior){
            // Chamando metódo.
            objNavReg.anteriorReg();
            
        }
    
    }// Fim metódo ActionListener.
    
    
    // Classe.
    public class ConectaBanco {
 
        private String url;
        private String login;
        private String senha;
        
        // Construtor.
        public ConectaBanco(String url, String login, String senha) {
            setUrl(url);
            setLogin(login);
            setSenha(senha);
        }

        public String getLogin() {return login;}
        public void setLogin(String login) {this.login = login;}
            
        public String getSenha() {return senha;}
        public void setSenha(String senha) {this.senha = senha; }
            
        public String getUrl() {return url;}
        public void setUrl(String url) {this.url = url; }
            
    }// Fim classe ConectaBanco.
 
  
    // Classe.
    public class Cadastrar extends JOptionPane {
        //Instanciando objeto.
        ConectaBanco objCB = new ConectaBanco("jdbc:mysql://localhost:3306/meu_conector_mysql", "root", "alex");
        
        // Atributo da classe.
        private String nome;
        
        public String getNome() {
            return nome;
        }
        public void setNome(String nome) {
            this.nome = nome;
        }
        
        //Vector<Cadastrar>
        public void  gravar(){
            //Tratamento exeções.
            try{
                // Drive.
                Class.forName("com.mysql.jdbc.Driver");
                // Conecta no Banco de Dados.
                Connection con = DriverManager.getConnection(objCB.getUrl(), objCB.getLogin(), objCB.getSenha());
                // Objeto comando SQL.
                Statement stmt = con.createStatement();
            
                // Inserir nome no banco de dados.
                stmt.executeUpdate("INSERT INTO tab_teste (nome) VALUES('" + getNome() + "')"); 
                 
                JOptionPane.showMessageDialog(this, "Dados Salvos!");
                
                // Fecha conexão com BD.
                stmt.close();
                con.close(); 
               
            } 
            catch(SQLException e){
                JOptionPane.showMessageDialog(this, "Erro! Cmdo SQL, info! -> " + e.getMessage());
            } 
            catch(ClassNotFoundException e){ 
                JOptionPane.showMessageDialog( this, "Driver não encontrado!" );
            }
           // return meuVetor;
        
        } //Fim metodo gravar. 
    
    
    }// Fim classe Cadastrar.
    

    // Classe.
    private class NavegarRegistros extends JOptionPane {
        //Instanciando objeto.
        ConectaBanco objCb = new ConectaBanco("jdbc:mysql://localhost:3306/meu_conector_mysql", "root", "alex");
         
        //Tipo do SQL, para retorno de consulta.
        ResultSet resultado;
        
        //Construtor.
        private NavegarRegistros(){
            //Tratamento de erros (exeções).
            try{ 
                //Drive que esta usando.
                Class.forName("com.mysql.jdbc.Driver");
                //Conecta no Banco de Dados.
                Connection con = DriverManager.getConnection(objCb.getUrl(), objCb.getLogin(), objCb.getSenha());

                Statement stmt = con.createStatement();
 
                resultado = stmt.executeQuery("SELECT nome FROM tab_teste");
               
            }catch(SQLException e){ //Trata os erros.
                JOptionPane.showMessageDialog(this,"Erro Cmdo SQL " + e.getMessage());
 
            }catch(ClassNotFoundException e){     
                JOptionPane.showMessageDialog(this,"Driver não encontrado");
            }       
        
        }// Fim metódo construtor.
        
        //Metódo que avança um registro por vez.
        //Vector<Cadastrar>
        private void proximoReg() {
             //Vector meuVetor = new Vector(); 
            try{
                resultado.next();
                jTextField_Saida.setText(resultado.getString("nome"));
             
            }catch(SQLException e){ //trata os erros
                JOptionPane.showMessageDialog(this,"Não Existem mais Registros.");        

            }
            //return meuVetor;
        }// Fim metódo proximo.
        
    
        //Metódo que retrocede um registro por vez.
        //Vector<Cadastrar>
        private void anteriorReg() {
            //Vector meuVetor = new Vector();
            try{
                resultado.previous();    
                jTextField_Saida.setText(resultado.getString("nome"));
            
            }catch(SQLException e){ //trata os erros
                JOptionPane.showMessageDialog(this,"Não Existem mais Registros.");        

            }
            //return meuVetor;
        }// Fim metódo anterior.
    
    
    }// Fim classe navegar

}// Fim classe Principal. 
//Instanciando
//Vector meuVetor = new Vector();
D

Resolvi meu problema.

Tirei do construtor e coloquei tudo nos 2 metodos, e ao invés de usar next() e previwus usei absoltuteRow(), com incremento e decremento de acordo com que avança ou retroceda os registros.

Criado 11 de maio de 2012
Ultima resposta 17 de mai. de 2012
Respostas 7
Participantes 3