Botão Próximo Registro apresentando erro de SQLException

12 respostas
J

Boa tarde pessoal,

Sou iniciante em JAVA SE, venho praticando esta maravilhosa linguagem porém estou emperrado num problema no qual não consigo evoluir, gostaria de uma ajuda.

Num formulário de registro eu consegui fazer funcionar os botões Novo, Salvar e Excluir porém no botão de navegar pelos registros, Botão Registro Anterior, Próximo Registro e etc, quando clico no botão apresenta a seguinte mensagem: Dados não localizados java.sql.SQLException: Column ‘id_cidade’ not found

A tabela no banco já existe pois já é possível Salvar novos registros e Excluir registro, estes 2 botões estão funcionando perfeitamente.
Alguém poderia me dizer porque este código da navegação pelos registros não está funcionando e porque esta aparecendo esta mensagem de Column ‘id_cidade’ not found ?

Segue o código do botão:

public void prox_registro() {
        try {
            obj_conexao.resultset.next();
            tf_codigo.setText(obj_conexao.resultset.getString("id_cidade"));
            tf_nome_cidade.setText(obj_conexao.resultset.getString("cid_nome_cidade"));
            jcb_uf.setSelectedItem(obj_conexao.resultset.getString("fk_id_uf"));
        } catch(SQLException erro) {
            JOptionPane.showMessageDialog(null, "Não foi possível ir para o próximo registro!" + erro);            
        }
    }

12 Respostas

jks1903

JorgitoPaiva:
Boa tarde pessoal,

Sou iniciante em JAVA SE, venho praticando esta maravilhosa linguagem porém estou emperrado num problema no qual não consigo evoluir, gostaria de uma ajuda.

Num formulário de registro eu consegui fazer funcionar os botões Novo, Salvar e Excluir porém no botão de navegar pelos registros, Botão Registro Anterior, Próximo Registro e etc, quando clico no botão apresenta a seguinte mensagem: Dados não localizados java.sql.SQLException: Column ‘id_cidade’ not found

A tabela no banco já existe pois já é possível Salvar novos registros e Excluir registro, estes 2 botões estão funcionando perfeitamente.
Alguém poderia me dizer porque este código da navegação pelos registros não está funcionando e porque esta aparecendo esta mensagem de Column ‘id_cidade’ not found ?

Segue o código do botão:

public void prox_registro() { try { obj_conexao.resultset.next(); tf_codigo.setText(obj_conexao.resultset.getString("id_cidade")); tf_nome_cidade.setText(obj_conexao.resultset.getString("cid_nome_cidade")); jcb_uf.setSelectedItem(obj_conexao.resultset.getString("fk_id_uf")); } catch(SQLException erro) { JOptionPane.showMessageDialog(null, "Não foi possível ir para o próximo registro!" + erro); } }

O erro ocorre porque provavelmente não há uma coluna chamada “id_cidade” na tabela do banco em questão.

J

oi jks1903, pior que existe sim, isso está me deixando intrigado, pois mudo o nome da coluna id_cliente e mesmo assim o erro continua com o nome no qual foi renomeado, não consigo entender porque da este erro.

jks1903

Então provavelmente o seu resultSet está referenciando a tabela incorreta.
Ou então obj_conexao está referenciando uma conexao com o banco incorreto.

Se possível, poste o código onde você referencia o ResultSet, juntamente com os metadados da tabela do banco.

J

Classe de Conexão

package ConexaoBancoDeDados;
import java.sql.*;
import javax.swing.*;

public class ConexaoMySql {
    
              String driver = "org.gjt.mm.mysql.Driver";
              String url = "jdbc:mysql://localhost/test";
              String usuario = "root";
              String senha = "123456";
              private Connection conexao;
              public Statement statement;
              public ResultSet resultset;
    
              
              //public boolean conecta(String driver, String url, String usuario, String senha) {
              public boolean conecta() {
                  boolean result = true;
                    try 
                    {
                      Class.forName(driver);
                      conexao = DriverManager.getConnection(url, usuario, senha);
                      JOptionPane.showMessageDialog(null, "Conexão com o MySQL realizada com Sucesso!");
                    }
                      catch(ClassNotFoundException Driver) 
                      {
                         JOptionPane.showMessageDialog(null,"Driver não localizado: " + Driver);
                         result = false;
                      }
                      catch(SQLException Fonte) 
                      {
                          JOptionPane.showMessageDialog(null,"Deu erro na conexão com a fonte de dados: " + Fonte);
                         result = false;  
                      }
                      return result;
              }

              public boolean desconecta() { 
                  boolean result = true;
                    try 
                    {
                      conexao.close();
                      JOptionPane.showMessageDialog(null, "Conexão com o Banco Fechada!");
                    }
                      catch(SQLException Fecha) 
                      {
                          JOptionPane.showMessageDialog(null,"Não foi possível fechar o Banco de Dador" + Fecha);
                         result = false;  
                      }
                      return result;
              }
              
              public boolean executeSQL(String sql) {
                  
                  boolean result = true;
                  try {
                      statement = conexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                                           ResultSet.CONCUR_READ_ONLY);
                      resultset = statement.executeQuery(sql);  
                      //JOptionPane.showMessageDialog(null,"Pesquisa realizada com Sucesso!");
                  }
                    catch(SQLException sqlex) 
                    {
                        JOptionPane.showMessageDialog(null,"Não foi possível executar o comando SQL" + sqlex +
                                ", o SQL foi passado" + sql);
                    }  
                  return result;
              }
              
}

Classe Formulário

package CursoJava.POO;

import java.awt.event.ActionListener;
import javax.swing.*;
import ConexaoBancoDeDados.ConexaoMySql;
import java.awt.event.ActionEvent;
import java.sql.SQLException;


public class Form_Cidade extends JFrame implements ActionListener {
    
    ConexaoMySql obj_conexao = new ConexaoMySql();
    
    JLabel lb_codigo, lb_nome_cidade, lb_uf;
    JTextField tf_codigo, tf_nome_cidade;
    JComboBox jcb_uf;
    JButton btn_novo, btn_salvar, btn_excluir, btn_alterar, btn_sair, btn_prox_registro, btn_ultimo_registro, btn_reg_anterior;
    private int navega = 0;

    
    Form_Cidade() {
        
        setTitle("Formulário Cadastro");
        setSize(800, 500);
        setLocation(300, 150);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);
        
        //TextField
        tf_codigo = new JTextField(5);
        tf_nome_cidade = new JTextField(45);

        //JLabel
        lb_nome_cidade = new JLabel("Cidade:");
        lb_uf = new JLabel("UF:");
        lb_codigo = new JLabel("Código");
        
        //ComboBox
        jcb_uf = new JComboBox();
        
        //Botões
        btn_novo = new JButton("Novo");
        btn_salvar = new JButton("Salvar");
        btn_alterar = new JButton("Alterar");
        btn_excluir = new JButton("Excluir");
        btn_sair = new JButton("Sair");
        btn_prox_registro = new JButton(">");
        btn_ultimo_registro = new JButton(">>");
        btn_reg_anterior = new JButton("<");
        
        btn_novo.setToolTipText("Insere o Novo Registro");
        btn_salvar.setToolTipText("Salva o Registro");
        btn_alterar.setToolTipText("Altera o Registro");
        btn_excluir.setToolTipText("Exclui um Registro");
        btn_prox_registro.setToolTipText("Próximo Registro");
        btn_ultimo_registro.setToolTipText("Último Registro");
        btn_reg_anterior.setToolTipText("Registro Anterior");
        
        getContentPane().add(tf_codigo);
        getContentPane().add(lb_codigo);
        getContentPane().add(lb_nome_cidade);
        getContentPane().add(lb_uf);
        getContentPane().add(tf_nome_cidade);
        getContentPane().add(jcb_uf);
        getContentPane().add(btn_novo);       
        getContentPane().add(btn_salvar);       
        getContentPane().add(btn_alterar);       
        getContentPane().add(btn_excluir);       
        getContentPane().add(btn_sair);
        getContentPane().add(btn_prox_registro);
        getContentPane().add(btn_ultimo_registro);
        getContentPane().add(btn_reg_anterior);
        
        //objeto.setBounds(posicaoColuna, posicaoLinha, comprimentoDaLinha, alturaDaLinha)
        getContentPane().setLayout(null);
                
        lb_codigo.setBounds(50, 25, 50, 25);
        tf_codigo.setBounds(120, 25, 50, 25);
        lb_nome_cidade.setBounds(50, 60, 80, 25);
        tf_nome_cidade.setBounds(120, 60, 160, 25);
        lb_uf.setBounds(50, 100, 70, 20);       
        jcb_uf.setBounds(120, 95, 60, 25);   
        
        
        btn_novo.setBounds(50, 150, 80, 30);        
        btn_salvar.setBounds(150, 150, 80, 30);   
        btn_alterar.setBounds(250, 150, 80, 30);
        btn_excluir.setBounds(350, 150, 80, 30);        
        btn_sair.setBounds(450, 150, 80, 30);
        btn_prox_registro.setBounds(140, 200, 80, 30);
        btn_ultimo_registro.setBounds(230, 200, 80, 30);
        btn_reg_anterior.setBounds(50, 200, 80, 30);
        
        //Registro dos objetos que vão sofrer ações
        btn_alterar.addActionListener(this);
        btn_novo.addActionListener(this);
        btn_excluir.addActionListener(this);
        btn_salvar.addActionListener(this);
        btn_sair.addActionListener(this);
        btn_prox_registro.addActionListener(this);
        btn_ultimo_registro.addActionListener(this);
        btn_reg_anterior.addActionListener(this);
        
        
        carrega_formulario();
      
        
        carrega_combo_box_uf();
        
        
        
    }
    
    
    
   @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == btn_novo) {
            novo();
        }  
        if (e.getSource() == btn_salvar) {
            salvar();
        }    
        if (e.getSource() == btn_excluir) {
            excluir();
        } 
        if (e.getSource() == btn_reg_anterior) {
            registro_anterior();
        }      
        if (e.getSource() == btn_prox_registro) {
            prox_registro();
        }  
        if (e.getSource() == btn_ultimo_registro) {
            ultm_registro();
        }         
        if (e.getSource() == btn_sair) {
            JOptionPane.showMessageDialog(null, "Tem certeza que deseja Sair?");
        }
       
    }    
   
   
   
    public final void carrega_formulario() {
        obj_conexao.conecta();
        obj_conexao.executeSQL("SELECT * FROM tb_cidade");
        try {
            obj_conexao.resultset.first();
            mostrar_dados();
        } catch(SQLException erro) {
        JOptionPane.showMessageDialog(null, "Dados não localizados" + erro);
        }          
    }   
   
   
   
    public void novo() {
        tf_codigo.setText("");
        tf_nome_cidade.setText("");
        jcb_uf.setSelectedItem("");
        tf_nome_cidade.requestFocus();    
        tf_codigo.setEditable(false);
    }
   
    private void salvar() {
        try {
            String sqlInsert = "INSERT INTO tb_cidade (cid_nome_cidade, fk_id_uf) VALUES " + 
                    "( '" + tf_nome_cidade.getText()
                    + "','" + jcb_uf.getSelectedItem()
                    + "' )";
            obj_conexao.statement.executeUpdate(sqlInsert);        
            JOptionPane.showMessageDialog(null, "Registro na tabela Cidade realizada com Sucesso!");
        } catch (SQLException erro) {
            JOptionPane.showMessageDialog(null, "Erro ao tentar Salvar o registro... " + erro);
        }
    }

    public void excluir() {
        try {
            String sql = "SELECT * FROM tb_cidade";
            obj_conexao.executeSQL(sql);
            obj_conexao.resultset.first();
            String nome = "Tem certeza que deseja Excluir a Cidade " + obj_conexao.resultset.getString("cid_nome_cidade") + " ? ";
            int opcao_escolhida = JOptionPane.showConfirmDialog(null, nome, "Exclusão ", JOptionPane.YES_NO_OPTION);
            if (opcao_escolhida == JOptionPane.YES_OPTION) {
                sql = "DELETE FROM tb_cidade WHERE id_cidade = id_cidade";
                int conseguiu_excluir = obj_conexao.statement.executeUpdate(sql);
                if (conseguiu_excluir == 1) {
                    JOptionPane.showMessageDialog(null, "Exclusão realizada com Sucesso!");
                    obj_conexao.executeSQL("SELECT * FROM tb_cidade");
                    obj_conexao.resultset.first();
                }
            }
            else
                return;
        } catch(SQLException erro) {
            JOptionPane.showMessageDialog(null,"Erro ao tentar excluir o registro da tabela Cidade " + erro);
        }
    }    
    
 
    public void registro_anterior() {
        try {
            obj_conexao.resultset.previous();
            mostrar_dados();
            navega = 1;
        } catch(SQLException erro) {
            JOptionPane.showMessageDialog(null, "Não foi possível ir para o próximo registro!" + erro);            
        }
    }
    
  
    public void prox_registro() {
        try {
            obj_conexao.resultset.next();
            mostrar_dados();
            navega = 2;
        } catch(SQLException erro) {
            JOptionPane.showMessageDialog(null, "Não foi possível ir para o próximo registro!" + erro);            
        }
    } 
    
    public void ultm_registro() {
        try {
            obj_conexao.resultset.last();
            mostrar_dados();
        } catch(SQLException erro) {
            JOptionPane.showMessageDialog(null, "Não foi possível ir para o próximo registro!" + erro);            
        }
    } 
    
    public void mostrar_dados() {
        try {
            tf_codigo.setText(obj_conexao.resultset.getString("id_cidade"));
            tf_nome_cidade.setText(obj_conexao.resultset.getString("cid_nome_cidade"));
            jcb_uf.setSelectedItem(obj_conexao.resultset.getString("fk_id_uf"));
        } catch(SQLException erro) {
            if (navega == 1)
                JOptionPane.showMessageDialog(null, "Você já está no Primeiro Registro!");
            else if (navega == 2)
                JOptionPane.showMessageDialog(null, "Você já está no Último Registro!");
            else    
                JOptionPane.showMessageDialog(null, "Dados não localizados" + erro);
            navega = 0;
        }
    }   
     
    public final void carrega_combo_box_uf() {
        obj_conexao.executeSQL("SELECT * FROM tb_uf");
        try {
            while (obj_conexao.resultset.next()) 
                jcb_uf.addItem(obj_conexao.resultset.getString("id_uf"));
        } catch (SQLException erro) {
            JOptionPane.showMessageDialog(null, "Dados não localizados" + erro);
        }    
    }
    
   
    
    public static void main(String args[]) {
        Form_Cidade obj_cidade = new Form_Cidade();
        obj_cidade.setVisible(true);
    }

}
jks1903

Experimenta alterar o código para:

public void mostrar_dados() { try { obj_conexao.executeSQL("SELECT * FROM tb_cidade"); tf_codigo.setText(obj_conexao.resultset.getString("id_cidade")); tf_nome_cidade.setText(obj_conexao.resultset.getString("cid_nome_cidade")); jcb_uf.setSelectedItem(obj_conexao.resultset.getString("fk_id_uf")); } catch(SQLException erro) { if (navega == 1) JOptionPane.showMessageDialog(null, "Você já está no Primeiro Registro!"); else if (navega == 2) JOptionPane.showMessageDialog(null, "Você já está no Último Registro!"); else JOptionPane.showMessageDialog(null, "Dados não localizados" + erro); navega = 0; } }

J

Já tentei assim desta forma tb, e o erro permanece…rs

jks1903

O método excluir que voce criou, está funcionando?

J

Está sim, todos os outros métodos estão funcionando, só os botões de navegação que não funcionam…

jks1903

De repente faz um teste pegando o valor por index, ao invés de string, apenas para verificar o que está instanciado nesse resultSet.

tf_codigo.setText(obj_conexao.resultset.getString(1)); //caso a coluna id_cidade seja a primeira coluna da tabela
J

também não funciona :frowning:

jks1903

já tentou um system.out.println para ver o que retorna em obj_conexao.resultset.getString(1)?

JavaDreams

Olá.

Eu costumo fazer um teste antes de executar a consulta passando a String sql
pois assim dá para saber se o erro ocorre antes ou depois desse ponto.

No método:

public boolean executeSQL(String sql) {

coloque

System.out.println(sql);

antes da linha

resultset = statement.executeQuery(sql);

e veja a query de consulta que ela retorna.

Depois pegue essa query e rode no banco para ver se dá certo.
Se não der, então já sabe que o proble3ma está deste ponto para trás.

Criado 5 de agosto de 2013
Ultima resposta 21 de ago. de 2013
Respostas 12
Participantes 3