dúvida dentro do while

2 respostas
C

Olá pessoal, outra dúvida pra vocês me ajudarem a sanar…

Seguinte:

primeiro eu executo um select no banco de dados, e jogo o resultado num
resultset.
executo mais um select em outro banco de dados, e jogo o resultado em
outro resultset.
executo mais um select em outro banco de dados, e jogo o resultado em
outro resultset.

Tenho 3 resultsets.

Aí começa a brincadeira:

while (primeiroResultSet.next()) {

        String dados = primeiroResultSet.getString("nome");
        String maisDados = primeiroResultSet.getString("idade");

        while (segundoResultSet.next()) {

                String dados2 = segundoResultSet.getString("nomePessoa");

                if (dados.trim().equals(dados2.trim())) {

                        while (terceiroResultSet.next()) {

                                String idade2 = terceiroResultSet.getString("idade");

                                if (maisDados.trim().equals(idade2.trim())) {

                                        funcaoFazQualquerCoisa(dados, maisDados);
                                }
                        }
                }
        }
}

O que estou fazendo no meu código é mais ou menos isso. Porém o método
funciona de forma eficiente apenas na primeira vez que passa!
Ele faz a consulta no primeiro select, testa o valor de uma de suas string
com o segundo select, e se for igual, testa outro valor
de sua outra string com outro select.

Se no final eu conseguir igualdade com os selects, tenho uma função que
executa algo.

O problema, é que quando ele executa a função funcaoFazQualquerCoisa(),
ele volta pro primeiro while, roda dentro dele até finalizar a
consulta sem ir pro segundo while. Eu não sei por que isso está
acontecendo! Ao meu ver, deveria refazer todo o processo testando valor
por valor do primeiro while com os outros.

Alguém sabe me dizer por que não está acontecendo dessa forma?

2 Respostas

C

na verdade, está acontecendo o seguinte:

ele executa o primeiro resultset

em seguida executa o segundo resultset até encontrar a igualdade

executa o terceiro resultset até encontrar igualdade

executa o processo.

volta pro primeiro resultset

testa o valor do primeiro resultset com o valor de continuação do segundo resultset. tipo assim: se na primeira vez, ele testou o segundo resultset 11 vezes, na segunda vez ele vai testar o primeiro resultset com o segundo resultset a partir do 12. Ele não volta do zero o segundo resultset.

Não sei porquê…

anderline

Amigo tenta usar um label rotulado no segundo while com a instrução continue, seria mais ou menos assim :

while(primerioRS.next()){

label://seu rotulo

while(segundoRS.next()){

if(testaalgo){

while(terceiroRS.next()){

if(testaalgumacondição){

meuMetodo();

continue label;//volta ao inicio do segundo laço;

}

}

}

}

}

Amigo eu acho q isso possa dar certo.

Abraços._

Criado 24 de outubro de 2006
Ultima resposta 24 de out. de 2006
Respostas 2
Participantes 2