Consulta em jTable

2 respostas
tonheds

Galera boa tarde, primeiramente deixa eu explicar como esta meu programa, possuo 2 tabelas (Clientes e Endereços)
na tabela clientes, ha uma chave estrangeira (fk_endereco) que referencia o endereco respectivo do cliente na tabela endereços…ate ai blz…

criei uma consulta que pega o cliente joga na jTable…e após ser dado 2 cliques na linha escolhida (no cliente desejado)…o programa abre outra janela com vários jTextFields ja preenchidos com as informaçoes do cliente escolhido…

ate ai tdo bem…roda perfeitamente…porem só esta rodando qndo eu seleciono a 1ª LINHA DA JTABLE…se eu tentar uma linha abaixo da o seguinte erro:

Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
        at java.util.ArrayList.RangeCheck(ArrayList.java:547)
        at java.util.ArrayList.get(ArrayList.java:322)
        at softshoes.view.consultas.ConsultaClientes.jTable1MouseClicked(ConsultaClientes.java:180)
        at softshoes.view.consultas.ConsultaClientes.access$100(ConsultaClientes.java:21)
        at softshoes.view.consultas.ConsultaClientes$3.mouseClicked(ConsultaClientes.java:81)
        at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:253)
        at java.awt.Component.processMouseEvent(Component.java:6219)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
        at java.awt.Component.processEvent(Component.java:5981)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4583)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4413)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4556)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4229)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4150)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2475)
        at java.awt.Component.dispatchEvent(Component.java:4413)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

esse numero index e size mudam de acordo com a linha que eu escolher…
o unico problema eh esse…como faço para poder pesquisar tbm das linhas subsequentes?
pq só ta fazendo a pesquisa da 1ª LINHA…por favor me ajudem…
segue abaixo o codigo responsavel pela busca no banco

//CHAMAR CLIENTE ESCOLHIDO APÓS PESQUISA DA TABELA

     public List<Cliente> selectClientePesquisa(String consulta ) throws SQLException {
     List<Cliente> listaConsulta = new ArrayList<Cliente>();
     try {
        Connection con = ConnectionFactory.getConnection();
         try {
             PreparedStatement stmt = con.prepareStatement( " select * from clientes where nome like ?" );

             stmt.setString(1, consulta + "%");

             ResultSet rs = stmt.executeQuery();

             while(rs.next()) {

                 String nome = rs.getString("nome");
                 String cpf = rs.getString("cpf");
                 String rg = rs.getString("rg");
                 String sexo = rs.getString("sexo");
                 Date data_nascimento = rs.getDate("data_nascimento");
                 String telefone = rs.getString("telefone");
                 String email = rs.getString("email");
                 int end = rs.getInt("fk_endereco");                 


                 listaConsulta.add(new Cliente(nome, cpf, rg, sexo, data_nascimento, telefone, email, end));
             }

             rs.close();
             stmt.close();



         } finally {
             try {
                 con.close();
             } catch (SQLException e) {
                 e.printStackTrace();
             }
         }
     } catch (SQLException e) {
         e.printStackTrace();
     }
        return listaConsulta;
 }


     //CHAMAR ENDERECO DO CLIENTE APOS PESQUISA

     public List<Endereco> selectEnderecoPesquisa(int a ) throws SQLException {
     List<Endereco> listaConsulta = new ArrayList<Endereco>();
     try {
        Connection con = ConnectionFactory.getConnection();
         try {
             PreparedStatement stmt = con.prepareStatement( " select * from enderecos where id_endereco = " + a);

             
             ResultSet rs = stmt.executeQuery();

             while(rs.next()) {

                 String rua = rs.getString("rua");
                 String bairro = rs.getString("bairro");
                 String complemento = rs.getString("complemento");
                 String cep = rs.getString("cep");
                 String cidade = rs.getString("cidade");
                 String uf = rs.getString("uf");
                


                 listaConsulta.add(new Endereco(rua, bairro, complemento, cep, cidade, uf));
             }

             rs.close();
             stmt.close();



         } finally {
             try {
                 con.close();
             } catch (SQLException e) {
                 e.printStackTrace();
             }
         }
     } catch (SQLException e) {
         e.printStackTrace();
     }
        return listaConsulta;
 }

e aqui segue o codigo do evento Mouse Clicked…sobre a tabela…

private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {                                     

        if(evt.getClickCount() == 2){

            int r = jTable1.getSelectedRow();

            try {

                dao.selectClientePesquisa((String) jTable1.getValueAt(r, 1));

                List<Cliente> teste = dao.selectClientePesquisa(consulta);

                teste.get(r).getNome();
                teste.get(r).getCpf();
                teste.get(r).getRg();
                teste.get(r).getSexo();
                teste.get(r).getData();
                teste.get(r).getTelefone();
                teste.get(r).getEmail();
                teste.get(r).getEndereco();

                int a = teste.get(r).getEndereco();

                JOptionPane.showMessageDialog(null, a);

                dao.selectEnderecoPesquisa(a);

                List<Endereco> teste2 = dao.selectEnderecoPesquisa(a);

                teste2.get(r).getRua();
                teste2.get(r).getBairro();
                teste2.get(r).getComplemento();
                teste2.get(r).getCep();
                teste2.get(r).getCidade();
                teste2.get(r).getUf();
                
                TelaDeClientes InformacoesClientes = new TelaDeClientes();

                InformacoesClientes.preencherCamposCliente(teste.get(r).getNome(), teste.get(r).getCpf(), teste.get(r).getRg(), teste.get(r).getSexo(), teste.get(r).getData(), teste.get(r).getTelefone(), teste.get(r).getEmail(), teste.get(r).getEndereco());

                InformacoesClientes.preencherCamposEndereco(teste2.get(r).getRua(), teste2.get(r).getBairro(), teste2.get(r).getComplemento(), teste2.get(r).getCep(), teste2.get(r).getCidade(), teste2.get(r).getUf());

                InformacoesClientes.show();

              
            } catch (SQLException ex) {
                Logger.getLogger(ConsultaClientes.class.getName()).log(Level.SEVERE, null, ex);
            }

        }

    }

eu fiz a mesma coisa com CONSULTA DE PRODUTOS…como só existe uma tabela no banco de produtos…funcionou perfeitamente…
agora qndo se tem 2 tabelas…ta dando esses conflitos ai…oq fazer??

grato

2 Respostas

Marky.Vasconcelos

Da uma olhada na SelectTable.

É mais interessante receber um objeto do tipo Cliente direto da consulta do que ter que pegar na List de acordo com a linha selecionada.

lina

Oi,

O erro diz que você está tentando pegar um get(int) de uma posição do ArrayList que não existe. Está parecendo que sua função mouse clicked esta errada.

Só não sei em qual momento…

Tchauzin!

Criado 5 de agosto de 2009
Ultima resposta 5 de ago. de 2009
Respostas 2
Participantes 3