Erro ao popular JTable [Resolvido]

4 respostas
R

Boa tarde pessoal... infelismente estou a dois dias tentando popular um JTalbe com um ResultSet.
Li vários artigo no fórum, porém não sei onde estou errando.

A consulta no banco é realizada, porém não consigo colocar os dados do ResultSet dentro da tabela, cria os cabeçalhos, porém nao vem as infomrmações.

Este é o código da classe Pesquisar:

btnPesquisar.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
           
            NegCliente objNegCli = new NegCliente();
            ResultSet rs = objNegCli.consultar(txtNome.getText());

            String[] nomesColunas = new String[] {"Codigo", "nome"};

            DefaultTableModel modeloTabela = new DefaultTableModel(null,nomesColunas){
                @Override
                public boolean isCellEditable (int row, int col){   
                    return false;   
                }
            };

            try {
                while (rs.next()) {

                    String[] valor = new String[]{
                            Integer.toString(rs.getInt("cliCod")),
                            rs.getString("cliNome"),
                     };

                    modeloTabela.addRow(valor);
                }

            } catch (SQLException ex) {}

            tblTabela.setModel(modeloTabela);

            }
        });

e esta é a função que eu chamo para consultar, está na classe NegCliente

public ResultSet consultar (String strValorConsulta) {
        String strSql = null;

        try {
            strSql = "SELECT cliCod, cliNome FROM tbCliente WHERE cliNome LIKE '" + strValorConsulta + "%'";

            Connection conn = ConectaBD.getConexao();
            Statement objComando =  conn.createStatement();
            ResultSet rstRegistros = objComando.executeQuery(strSql);

            conn.close();

            return rstRegistros;

        } catch (Exception ex) {
                ex.getMessage();
                return null;
            }
    }

Vocês que tem mais experiências com Java (pois eu só estou desenvolvendo na facul) tente achar esse erro....

Vlw...

4 Respostas

ViniGodoy

Provavelmente é porque, ao fechar a conexão, você também perde o ResultSet e o Statement. Então, copie-o resultset para um CachedRowSet antes de fechar a conexão, e retorne esse cachedrowset.

Outra coisa, o código para fechar a conexão, o statement e o resultset devem, obrigatoriamente, estar num finally.

R

Desculpe minha ignorância, mas estou programando em java há pouco tempo… tem como exemplificar o que você disse?

Vlw

ViniGodoy
try {
   Connection conn = null;
   PreparedStatement objComando = null;
   ResultSet rstRegistros = null;

   try {  
      //Abrimos a conexão 
      conn = ConectaBD.getConexao();  
      //Preparamos o Statement
      strSql = "SELECT cliCod, cliNome FROM tbCliente WHERE cliNome LIKE ?";  
      objComando =  conn.prepareStatement();  
      objComando.setString(1, strValorConsulta + "%");
      //Executamos a consulta
      rstRegistros = objComando.executeQuery();  
      //Criamos um CachedRowSet e copiamos o resultado para dentro dele
      CachedRowSet rows = new CachedRowSetImpl();
      rows.populate(rstRegistros); 
      return rows; 
   }  
   finally {
      //No finally, fechamos tudo que foi aberto
      if (conn != null) conn.close();  
      if (objComando != null) objComando.close();
      if (rstRegistros != null) rstRegistros.close(); 
   }
} catch (Exception ex) {  
   ex.printStackTrace(); //Em caso de problemas, imprimos a exception
   return null;  
}
R

Obrigado pela aula…

Problema resolvido.

Criado 5 de dezembro de 2009
Ultima resposta 6 de dez. de 2009
Respostas 4
Participantes 2