Dúvida com JButton e Retornar SQL como modo de pesquisa (um resultado por vez)

2 respostas
G

Olá a todos.
Pessoal, estou com uma dúvida um pouco gritante, estou desenvolvendo um Frame e neste frame eu tenho um jTable onde mostra todas as informações de uma tabela. Também tenho um jTextField que irá servir de parâmetro para pesquisa, e um JButton para executar esta pesquisa. Até aí tudo bem, a minha dúvida é que dentro de um argumento de pesquisa, eu posso ter vários resultados, e ao invés de mostrar somente aqueles resultados dentro da jTable, eu preciso, sempre que a pessoa clicar no botão Pesquisar, ele irá chamar o próximo registro sql. O motivo pelo qual isto é que a cada resultado encontrado (um por vez) gostaria que ele selecionasse e fosse até aquela linha que se encontra o registro que bate com o parâmetro pesquisado. Então eu não posso usar

while (rs.next())

Porque enquanto existir um resultado que atende à aquele argumento, ele irá fazer a instrução sql. Tentei com :

if (rs.next())

E ele só me retorna o primeiro resultado.

Não tenho dúvidas em como montar minha SQL, mas como eu posso fazer para prosseguir com isto? Já pensei em colocar um outro botão para que, se caso fosse identificado mais de um registro encontrado por causa da pesquisa contendo aquele argumento, mas seria uma coisa a mais que não seria ‘necessária’.

Por enquanto desenvolvi meu código desta forma, já fiz várias modificações mas ou foi mancada minha, ou não encontrei uma forma necessariamente legal para montar isto:

if (jComboBox1.getSelectedIndex() == 1) {
            //TODO continuar este bloco.
         
            sql = "select codigo, problema, solucao from reg_helpdesk where problema like '%" + jTextFieldPesquisa.getText().trim() + "%'";
            rs = S.preencheDataSet(sql);


            try{
                        if ((rs.next())) {
                            codigo = rs.getString(1);
                            problema = rs.getString(2);
                            solucao = rs.getString(3);

                            System.out.println("\n" + codigo);
                        jTableRegistros.setRowSelectionInterval(Integer.parseInt(codigo) - 1, Integer.parseInt(codigo) - 1);
                        }
                        if (rs.isLast())
                            ultimoResultado = 1;

                } catch (Exception e) {
                    e.printStackTrace();
                }

    }

Obrigado desde já.

2 Respostas

G

Bom, como o pessoal não me respondeu, eu dei uma vasculhada e achei uma solução, só fazer o seguinte:

int verificaUltimoRegistro = 0;
            sql = "select codigo, problema, solucao FROM reg_helpdesk WHERE codigo > '" + proxRegistro + "' and  problema like '%" + jTextFieldPesquisa.getText().trim() + "%' limit 0,1";
            rs = S.preencheDataSet(sql);
            String sql2 = "select codigo, problema, solucao FROM reg_helpdesk where problema like '%" + jTextFieldPesquisa.getText().trim() + "%'";
            ResultSet rs2 = S.preencheDataSet(sql2);
            try {
                while (rs2.next()) {
                    verificaUltimoRegistro = rs2.getInt(1);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                if (verificaUltimoRegistro == proxRegistro) {
                    proxRegistro = 0;
                } else {
                    while (rs.next()) {
                        proxRegistro = Integer.parseInt(rs.getString(1));
                        codigo = rs.getString(1);
                        jTableRegistros.setRowSelectionInterval(Integer.parseInt(codigo) - 1, Integer.parseInt(codigo) - 1);

                    }
                    rs.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

Na verdade é só usar o limit que retorna apenas a quantidade desejada, ou seja, um resultado (0,1), utilizei uma variavel para comparar se era o último registro e outra variável que sempre irá pegar o registro maior que aquele que estou buscando.
Bom, espero ter explicado :wink:

[]s!!!

caiofabioa

Cara tem como vc comentar algumas lindas que nao da pra saber certinho o que ta acontecendo! Obrigado

Criado 10 de dezembro de 2009
Ultima resposta 31 de mai. de 2012
Respostas 2
Participantes 2