Duvidas ao tratar resultset nulo

2 respostas
E

Olá, em um programa que eu estou montando, estou trabalhando com um campo status em cada tabela do meu banco, no qual o valor é OK ou REMOVIDO.

E quando eu faço uma query com o seguinte sql :
select * from cliente where sta_cli not in ('REMOVIDO')
para listar todos os clientes que naum foram removidos, se ele me retorna um valor nulo, dava erro, ae coloquei o seguinte if
if(rs.first() == false){}

Agora nao da o erro, mas quando eu tento navegar nos registro retornados pelo resultset com rs.next(), rs.first() ...., ele simplimente não navega. o código de onde atualiza os campos é esse

private void atualizaCampos(){
        try{
            if(rs.first() == false){}
            else{
                if(rs.first() == false){
                    limpaCampos();
                }else{
                if(rs.isAfterLast()){
                    rs.previous();
                }
                else if(rs.isBeforeFirst()){
                    rs.next();
                }
                if(!rs.wasNull()){
                    cmbEst.removeAllItems();
                    cmbNasc.removeAllItems();
                    lblNumCod.setText(String.valueOf(rs.getInt("cod_cli")));
                    txtNom.setText(rs.getString("nom_cli"));
                    txtEnd.setText(rs.getString("end_cli"));
                    txtCid.setText(rs.getString("cid_cli"));
                    cmbEst.addItem(rs.getString("est_cli"));
                    String partes[] = String.valueOf(rs.getDate("nas_cli")).split("-");
                    String nascimento = partes[2] +  partes[1] +  partes[0]; 
                    txtDNas.setText(nascimento);
                    txtTel.setText(rs.getString("tel_cli"));
                    txtEmail.setText(rs.getString("ema_cli"));
                    cmbNasc.addItem(rs.getString("nascio_cli"));
                    txtCpf.setText(rs.getString("cpf_cli"));
                    txtPass.setText(rs.getString("pas_cli"));
                }
                }
            }
        }
        catch(SQLException e){
            mostraErro(e.toString(), e.getMessage());
        }
        catch(Exception e){
            mostraErro(e.getMessage());
        }
        
    }

Alguem ae tem uma luz.

2 Respostas

rodrigo.bossini

Manda o trecho de código em que você cria o statement.

E
rod.attack:
Manda o trecho de código em que você cria o statement.

Eu uso uma classe separada para conectar ao banco...

Vou colocar aki uma classe inteira, e a classe do banco..

package consultabd;

import consultabd.*;
import java.sql.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.util.*;


public class ServicoAdd extends javax.swing.JInternalFrame {
    
    private ResultSet rs;
    int altgrav;
    ConectaBanco conectaBanco =  new ConectaBanco();
    /** Creates new form Reservas */
    public ServicoAdd() {
        initComponents();
        atualizaTabela(3);
        rs = conectaBanco.busca("select * from servicosadd where sta_ser not in ('REMOVIDO')");
        atualizaCampos();
    }
 
    
    private void atualizaCampos(){
        try{
          if(rs.last() == false){

          }
          else{
            if(rs.isAfterLast()){
                rs.previous();
            }
            else if(rs.isBeforeFirst()){
                rs.next();
            }
            if(!rs.wasNull()){

                lblNumCod.setText(String.valueOf(rs.getInt("cod_ser")));
                txtDesc.setText(rs.getString("des_ser"));
                txtPre.setText(rs.getString("pre_ser"));
             
            }
           }   
        } 

        catch(SQLException e){
            e.printStackTrace();
            mostraErro(e.toString(), e.getMessage());
        }
        catch(Exception e){
            e.printStackTrace();
            mostraErro(e.getMessage());
        }
        
    }

    private void atualizaTabela(int colunas) {
        rs = conectaBanco.busca("select cod_ser,des_ser,pre_ser from servicosadd where sta_ser not in ('REMOVIDO')");
        Vector cabecalho = new Vector();
           cabecalho.addElement("CODIGO");
            cabecalho.addElement("DESCRIÇÃO");
            cabecalho.addElement("PREÇO");


        try {
            
            Vector dados = new Vector();
            DefaultTableModel modelo = new DefaultTableModel();
            for (int i = 0; i < cabecalho.size(); i++) {
                modelo.addColumn(cabecalho.get(i));
            }

            
            while (rs.next()) {
                for (int i = 1; i <= colunas; i++) {
                    dados.add(rs.getString(i));
                }
                modelo.addRow(dados.toArray());
                dados.removeAllElements();

            }
            tabSer.setModel(modelo);
        } catch (SQLException e) {
            e.printStackTrace();
            mostraErro(e.toString());
        } catch (Exception e) {
            e.printStackTrace();
            mostraErro(e.toString());
        }

    }
    
    
    
   private void excluir(int codigo){
        int resposta = JOptionPane.showConfirmDialog(null, "Deseja realmente excluir esse registro?","",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
        if(resposta==0){
            String apaga = "update servicosadd set sta_ser='REMOVIDO' where cod_ser="+codigo;
            conectaBanco.grava(apaga);
            atualizaTabela(3);
            rs = conectaBanco.busca("select * from servicosadd where sta_ser not in ('REMOVIDO')");
            atualizaCampos();
        }
        else{
            mostraErro("Exclusão Cancelada");
        }
       
    }
    
    private void gravar(int i){
        try{
            String gravar = null;
            String desc = txtDesc.getText().toUpperCase();
            String preco = txtPre.getText();

            if (i==0){
                int codigo = Integer.parseInt(lblNumCod.getText());
                gravar = "update servicosadd set des_ser='"+desc+"',pre_ser='"+preco+"' where cod_ser="+codigo;
            }
            if (i==1){
                gravar = "insert into servicosadd values(0,'"+desc+"','"+preco+"','OK')";
            }
            conectaBanco.grava(gravar);
            atualizaTabela(3);
            rs = conectaBanco.busca("select * from servicosadd where sta_ser not in ('REMOVIDO')");
            atualizaCampos();
        }
        catch(Exception e){
            e.printStackTrace();
            mostraErro(e.getMessage());
        }
        
    }
   
    
    
    
    
    private void mostraErro(String erro) {
        JOptionPane.showMessageDialog(null, erro, "Erro", JOptionPane.ERROR_MESSAGE);
    }

    private void mostraErro(String e, String erro) {
        JOptionPane.showMessageDialog(null, erro, e, JOptionPane.ERROR_MESSAGE);
    }

    private void limpaCampos(){
                txtDesc.setText("");
                txtPre.setText("");
        
    }
    
    private void habilitaCampos(boolean arg){

                txtDesc.setEditable(arg);
                txtPre.setEditable(arg);
                
    }
    
    
    private void gravando(boolean arg){
        btnGravar.setEnabled(arg);
        btnCancelar.setEnabled(arg);
        btnNovo.setEnabled(!arg);
        btnAlterar.setEnabled(!arg);
        btnRemover.setEnabled(!arg);
        btnPrimeiro.setEnabled(!arg);            
        btnAnterior.setEnabled(!arg);            
        btnProximo.setEnabled(!arg);            
        btnUltimo.setEnabled(!arg);            
    }
                       

private void btnNovoActionPerformed(java.awt.event.ActionEvent evt) {                                        
    limpaCampos();
    habilitaCampos(true);
    gravando(true);
    altgrav = 1;
}                                       

private void btnAlterarActionPerformed(java.awt.event.ActionEvent evt) {                                           
    habilitaCampos(true);
    gravando(true);
    altgrav = 0;
}                                          

private void btnFecharActionPerformed(java.awt.event.ActionEvent evt) {                                          
    doDefaultCloseAction();
}                                         

private void btnGravarActionPerformed(java.awt.event.ActionEvent evt) {                                          
    habilitaCampos(false);
    gravando(false);
    gravar(altgrav);

}                                         

private void btnRemoverActionPerformed(java.awt.event.ActionEvent evt) {                                           
    excluir(Integer.parseInt(lblNumCod.getText()));
}                                          

private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {                                            
    habilitaCampos(false);
    gravando(false);
    rs = conectaBanco.busca("select * from servicosadd where sta_ser not in ('REMOVIDO')");
    atualizaCampos();
}                                           

private void btnPrimeiroActionPerformed(java.awt.event.ActionEvent evt) {                                            
try{
        rs.first();
        atualizaCampos();
    }
    catch(Exception e){
        mostraErro(e.getMessage());
    }
}                                           

private void btnAnteriorActionPerformed(java.awt.event.ActionEvent evt) {                                            
try{
        rs.previous();
        atualizaCampos();
    }
    catch(Exception e){
        mostraErro(e.getMessage());
    }
}                                           

private void btnProximoActionPerformed(java.awt.event.ActionEvent evt) {                                           
try{
        rs.next();
        atualizaCampos();
    }
    catch(Exception e){
        mostraErro(e.getMessage());
    }
}                                          

private void btnUltimoActionPerformed(java.awt.event.ActionEvent evt) {                                          
try{
        rs.last();
        atualizaCampos();
    }
    catch(Exception e){
        mostraErro(e.getMessage());
    }
}

Classe do que conecta ao banco

package consultabd;
import com.mysql.jdbc.*;


import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.*;

public class ConectaBanco {
    
    
    private String url = "jdbc:mysql://localhost/locadora";
    private String driver = "com.mysql.jdbc.Driver";
    private Connection con;
    private Statement st;
    private ResultSet rs;
    

   
    public ResultSet busca(String sql){
        try{
            Class.forName(driver);
            con = (Connection) DriverManager.getConnection(url,"root","123");
            st = (Statement) con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
            rs = st.executeQuery(sql);
             
            return rs;
        }
        catch(Exception e){
            mostraErro(e.getMessage());
            return null;
        }
        
    }
    

    public void grava(String sql){
        try{
            Class.forName(driver);
            con = (Connection) DriverManager.getConnection(url,"root","123");
            st = (Statement) con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
            int respostadobanco = st.executeUpdate(sql);
            if(respostadobanco==1){
                JOptionPane.showMessageDialog(null, "Sucesso!!!");
            }
            else{
                JOptionPane.showMessageDialog(null, "Erro!!!");
            }
        }
        catch(SQLException e){
            mostraErro(e.toString(),e.getMessage());
        }
        catch(Exception e){
            mostraErro(e.toString(),e.getMessage());
        }
    }
    

      
      
   
    private void mostraErro(String erro) {
        JOptionPane.showMessageDialog(null, erro, "Erro", JOptionPane.ERROR_MESSAGE);
    }

    private void mostraErro(String e, String erro) {
        JOptionPane.showMessageDialog(null, erro, e, JOptionPane.ERROR_MESSAGE);
    }

}

No primeiro codigo eu soh tirei a parte onde o netbeans criar para inicializar os componentes.

Antes de eu fazer esse tratamento para nulo, eu navegava normalmente, soh dava problema quando retornava nulo.

Criado 26 de novembro de 2008
Ultima resposta 26 de nov. de 2008
Respostas 2
Participantes 2