Ao pesquisar, posicionar o resultSet noresultado encontrado

Pessoal é o seguinte.
Tenho um form com as informações de um cadastro de cidades por exemplo (codigo, nome, uf), fiz os botões ne navegação e esta tudo ok.
O meu problema é o seguinte, uso um JtextField para digitar parte do nome de uma cidade e gero uma sql para ele encontrar e depois coloco nos campos o codigo, o nome e a uf da cidade. O problema é que, depois, nao consigo navegar com os botoes de primeiro, anterior, proximo oou ultimo a partir deste resultado.

Não sei se eu estou sendo claro mas vou dar um exemplo. tenho os códigos cadastrados 1,2,3,4,5,6.
faço a pesquisa e trago os dados do registro 3. O problema e que, se eu clicar no botao anterior, ele nao volta pro 2 e se clicar no proximo ele nao vai no 4, entendeu? quero posicionar meu resultset no registro filtrado. Como fazer isso???

Cara, posso estar falando besteira, mas acho que o jeito é você fazer a pesquisa na mão mesmo, e não atravás de uma consulta SQL. Se você fizer uma consulta pra pesquisar, é normal que não funcionem mais o anterior e próximo porque agora a consulta só retornou o resultado certo.

Maneira que pensei: você carrega tudo e mantém do jeito que está. Quando o usuário digitar algo, tu faz a pesquisa mas pede ao banco somente a ID do registro encontrado na pesquisa. Com essa ID disponível, tu fazes uma busca pelo conjunto geral de cidades procurando pela posição do ResultSet que contém um registro com a mesma ID que o banco retornou na pesquisa. Achado o registro certo, você configura o ponteiro do ResultSet.

OBS.: após a pesquisa e o retorno da ID, vai ficar muito lento, dependendo do resultado, você fazer um loop pelas cidades procurando a ID da cidade certa. O interessante era que você ordenasse as cidades por ID e então usasse pesquisa binária para encontrar o registro certo.

Cara, se você colocasse o erro que está acontecendo ficaria mais fácil de ajudar…mas vamos tentar…
A meu ver, o seu problema se resolveria se você deixasse o seu ResultSet instanciado enquanto poderia ter a função de navegação das suas telas. Para isso você deve colocar o código que busca esses resultados fora do código da navegação entre as telas. Ou então outra medida seria buscar os dados antes do código de navegação, e realizar o código novamente nos eventos de navegação somente se o seu ResultSet nnão estiver instanciado…
Deu pra sacar alguma coisa???

[]'s.

Não esta dando erro algum, eu navego entre os registros e tudo certo.
o problema é que, quando eu pesquiso, eu faço um select * from cidade where cidade = “xxxx”, ele me retorna e eu preencho os Jtextfields com as informações, beleza.
mas vamos dizer que originalmente eu estou posicionado no registro 9, dai, eu pesquiso os dados e o método de filtrar me retorna o registro numero 3, eu mostro os dados desse registro na tela, até ai beleza, mas o problema é, qdo for clicar no botao anterior, ele vai para o registro nº 8 (porque estava no 9 no inicio) quando ele deveria ir pro registro nº 2(porque eu pesquisei o 3)… entendeu?

uma solução seria eu dar um first() no resultSet e ir andando até o registro 3, mas imagine isso numa query que tivesse 300.000 registros… e eu pesquisa-se o de numero 250.000… ficaria muito lento andar um por um até chegar no que eu quero.

Obrigado pela ajuda

Cara, pelo que eu entendi, se você está acessando os valores da query antiga através dos botões de previous/next, acho que o seu único problema aí é que você não fechou o ResultSet antigo e continua referenciando ele…
Acho que o que resolveria era apontar esse ResultSet que você está usando sempre para o ResultSet da query atual. Deu pra entender?
Se não deu pra entender, acho melhor você colocar alguns trechos de código aqui para a gente parar de abstrair as situações e exemplificar, sacou?

[]'s.

[quote=kaique]Cara, pelo que eu entendi, se você está acessando os valores da query antiga através dos botões de previous/next, acho que o seu único problema aí é que você não fechou o ResultSet antigo e continua referenciando ele…
Acho que o que resolveria era apontar esse ResultSet que você está usando sempre para o ResultSet da query atual. Deu pra entender?
Se não deu pra entender, acho melhor você colocar alguns trechos de código aqui para a gente parar de abstrair as situações e exemplificar, sacou?

[]'s.[/quote]

pronto… é isso mesmo o que eu estou fazendo.
O meu problema é mandar apontar o resultset anterior para pegar o valor do result set novo… digamos que eu esteja no registro 10 (do result set anterior) e o novo me retorne o registro nº 1000, como eu aponto o result set anterior no registro 1000 sem ficar dando next.?

Desculpe essas perguntas simples mas eu trabalho mais com delphi e lá eu faço o seguinte, abro uma query, vejo o codigo e depois no tabela principal eu uso o locate. mas nao sei como é isso em java

Obrigado pela paciencia

Cara, é o que te falei.

Ordena essas cidades, estados, ou o que for, por ID. Aí tu usa pesquisa binária pra encontrar a posição certa no result set.

Traga o resultado do ResultSet para um List (pode ser ArrayList).
Entao vc pode fazer o seguinte:

lista.get( 0 ); // “Primeiro”
lista.listIterator().next(); // “Próximo”
lista.listIterator().previous(); // “Anterior”
lista.get( lista.size() - 1 ); // “Último”

[quote=fabiocsi]Traga o resultado do ResultSet para um List (pode ser ArrayList).
Entao vc pode fazer o seguinte:

lista.get( 0 ); // “Primeiro”
lista.listIterator().next(); // “Próximo”
lista.listIterator().previous(); // “Anterior”
lista.get( lista.size() - 1 ); // “Último”

[/quote]

Isso eu sei fazer, alias os botoes primeiro, anterior, proximo e ultimo já fazem mais ou menos isso.

o que eu nao queria é ir dando lista.listIterator().next(); até o registro filtrado… imagine se ele escolhe o registro de 1º 150.000… eu iria ter que correr 150000 registros… isso iria ficar lento demais.

quero dizer ao resultset para ele ir direto nesse registro.

em Delphi eu usaria assim "ibdataset.locate(codigo = 150000); e pronto

como eu jaço isso em java?

O problema é que o ResultSet nao é nada, comparado ao dataset do Delphi.
Vc não vai encontrar métodos prontos desse tipo nele.

Mas acho que no seu caso, um bom uso de Criteria (Hibernate) resolveria