Inserindo dados de um ResultSet em JTable

Boa tarde, estou com um problema com a insercao dos dados do banco em um JTable, o vetor pessoa esta retornando os todos os dados do banco mas dai quando eu tento inserir na tabela so aparece o ultimo registro. estou mandando o codigo de insercao na tabela.

   public void desenhaTabela(){
	    PessoaDAO pessoaDAO = new PessoaDAO();
			Pessoa pessoa = new Pessoa();
			Vector aPessoa;
      aPessoa = pessoaDAO.tabela();
      ArrayList vetor = new ArrayList();
      for (int i=0 ;i<aPessoa.size();i++){
         pessoa = (Pessoa) apessoa.elementAt(i+1); 
         JTable.setModel(new DefaultTableModel(new Object [] [] {{Integer.toString(pessoa.getCod()),
                                                                          pessoa.getNome(), pessoa.getDt_Nascimento(), 
                                                                          Integer.toString(pessoa.getcodigo()), pessoa.getSexo(),
                                                                          pessoa.getDt_Inclusao(), pessoa.getCpf(), 
                                                                          Float.toString(pessoa.getVlrCota())}}, colunasNome));
      }
      
           JTable.repaint();      
      
   }

Tipo não sei qual o problema ae, mas hj estava fazendo uma aplicação igual a sua trabalhando com vetor…

Eu obtive o modelo antes, dai ia criando linhas e inserindo. aqui vai o código:


DefaultTableModel modelo = (DefaultTableModel) jTable1.getModel();
for (int i=0; i < usuarios.tamanho() ; i++) {
modelo.addRow(new String [] {"","","","",""});
UsuarioRU membro = usuarios.percorre(i);
jTable1.setValueAt(Integer.toString(membro.getCod()),i,0);
jTable1.setValueAt(membro.getNome(),i,1);
jTable1.setValueAt(Float.toString(membro.getSaldo()),i,2);
jTable1.setValueAt(membro.getTipo(),i,3);
jTable1.setValueAt(membro.getSituacao(),i,4);
}

“usuarios” contem um vetor (results) sendo a função “percorre(i)” que obtém o usuario do vetor. É uma tabela com 5 campos, e fui usando o método setValueAt.

trabalhando direto com vetor…:

      DefaultTableModel modelo = (DefaultTableModel) jTable1.getModel();
        for (int i=0; i < results.size() ; i++) {
            modelo.addRow(new String [] {"","","","",""});
            UsuarioRU membro = (UsuarioRU)results.get(i);
            jTable1.setValueAt(Integer.toString(membro.getCod()),i,0);
            jTable1.setValueAt(membro.getNome(),i,1);
            jTable1.setValueAt(Float.toString(membro.getSaldo()),i,2);
            jTable1.setValueAt(membro.getTipo(),i,3);
            jTable1.setValueAt(membro.getSituação(),i,4);
        }

[]'s

O problema e que so aparece o ultimo registro do banco na tabela, como se ele criasse um model pra todos os registros e vai jogando um por cima do outro ate aparecer na tela so o ultimo. Nao entendi bem essa sua funcao percorre(i), voce fez ela desacoplada do programa?

[],s
Klark

Tipo, eu fiz uma classe chamada Usuarios

public class Usuarios
{
    private static Vector results = new Vector();
    private static Banco banco = new Banco();
...

Dentro dessa classe eu tenho os métodos q chamam os métodos da classe banco (abre conexao, cria statement)…

Dentro da classe Usuarios tenho o seguinte método :

public void busca (String codigo, String nome, String saldo, String situacao, String tipo){
      String sql = "SELECT codigo,nome,saldo,situacao,imagem,tipo from comensal" + sqlwhere(codigo, nome, saldo, situacao, tipo);
      try {
            ResultSet rs = banco.selecionar(sql);
            while (rs.next()){  
                UsuarioRU usuario= new UsuarioRU();
                usuario.setCod(rs.getInt("codigo"));
                usuario.setNome(rs.getString("nome"));
                usuario.setSituacao(rs.getString("situacao"));
                usuario.setSaldo(rs.getFloat("saldo"));
                usuario.setTipo(rs.getString("tipo"));
                byte[] imgBytes = rs.getBytes(5);
                usuario.setFoto(imgBytes);
                results.addElement(usuario);
            }
        
    } catch (SQLException sqle){
            sqle.printStackTrace();
    }
}

Os parametros desse método vem de JtextFields e o método “sqlwhere” monta o where da sql sem erros.

O método busca na classe banco é este:

    public ResultSet selecionar(String sql) { // seleção usuario
        ResultSet rs = null;
        try {
            rs = stm.executeQuery(sql); //método executeQuery: usado para comandos SQL que retornam uma tabela
        } catch (SQLException sqle){
            sqle.printStackTrace();
        }
        return rs;
    }

Então cada elemento do meu vetor results é um UsuarioRU, na classe UsuarioRU tenho os métodos get e set de cada variável. O método “percorre(int i)” apenas recebe a posição do vetor e retorna um UsuárioRu.

  public UsuarioRU percorre(int i){
      if (i < results.size()) {
          UsuarioRU membro = (UsuarioRU) results.get(i);
          return membro;
        } 
        else
            return null;
    }

Dai vo preenchendo o Jtable.

  private void buscaButton1MouseClicked(java.awt.event.MouseEvent evt) {                                          
// TODO add your handling code here:
        usuarios.abreConexao();
        usuarios.busca(buscacod.getText(),buscanome.getText(),buscasaldo.getText(),buscasit.getText(),buscatipo.getText());
        if (usuarios.tamanho() == 0)
            JOptionPane.showMessageDialog(null,"A consulta não retornou dados", "Restaurante Universitário",0);
        else {
            numerores_jLabel6.setText("Resultados: " + Integer.toString(usuarios.tamanho()));
            DefaultTableModel modelo = (DefaultTableModel) jTable1.getModel();
            for (int i=0; i < usuarios.tamanho() ; i++) {
                modelo.addRow(new String [] {"","","","",""});
                UsuarioRU membro = usuarios.percorre(i);
                jTable1.setValueAt(Integer.toString(membro.getCod()),i,0);
                jTable1.setValueAt(membro.getNome(),i,1);
                jTable1.setValueAt(Float.toString(membro.getSaldo()),i,2);
                jTable1.setValueAt(membro.getTipo(),i,3);
                jTable1.setValueAt(membro.getSituacao(),i,4);
            }
        }
    }            

Coloquei dessa maneira pra ficar mais fácil a visualização da inserção
no Jtable, pois tenho que explicar os códigos dps… e tals

[]'s

Tipo :

...
 DefaultTableModel modelo = (DefaultTableModel) JTable.getModel();
 for (int i=0 ;i<aPessoa.size();i++){
      pessoa = (Pessoa) apessoa.get(i); 
      modelo.addRow(new String [] {Integer.toString(pessoa.getCod()),
                                  pessoa.getNome(),pessoa.getDt_Nascimento(),
                                  Integer.toString(pessoa.getcodigo()),pessoa.getSexo(),
                                  pessoa.getDt_Inclusao(),pessoa.getCpf(), 
                                  Float.toString(pessoa.getVlrCota())});
}

Ele vai inserindo as linhas com os campos e fica bem mais resumido
:stuck_out_tongue:

[]'s