Realizar um while() em um ResultSet mais de uma vez

22 respostas
pyro

Pessoal existe alguma forma de realizar um while() de um ResultSet mais de uma vez? Se não for possível existe alguma forma de conseguirmos o mesmo efeito dele?

22 Respostas

victorwss

while() ???

Não seria next() o que você quer dizer?

Alkamavo

tb me pareceu eskisito…

O k realmente queres dizer?

gobbo

é soh fazer ambas as coisas que voce queria fazer em whiles diferentes, no mesmo while

pyro

É o seguinte tenho um laço while que itera sobre um ResultSet da seguinte forma:

while(rs.next()){
  ..... código aqui ....
}

É que eu preciso disparar esse while mais de uma vez e pelo que pude perceber depois de iterado 1 vez o ResultSet não mais poderá ser iterado (me corrijam se estiver errado).
Era isso que eu queria saber, talvez utilizando uma matriz multidimensional resolva, o que vcs acham da idéia?

Alkamavo
while(rs.hasnext()){
codigo aki

}
gobbo
while(rs.hasNext()){
    //codigo aki
}
gobbo

use o metodo beforeFirst()
http://java.sun.com/javase/6/docs/api/java/sql/ResultSet.html#beforeFirst()

while(rs.hasNext()){
     //codigo aki
} 

rs.beforeFirst();


while(rs.hasNext()){
     //codigo aki
}
Alkamavo

gobbo:
while(rs.hasNext()){ //codigo aki }

so cara pegando no meu pé…

era so um “n” minusculo…
nao precisava…
So malicia… :twisted: :twisted: :twisted: :twisted: :twisted: :twisted: :twisted: :twisted: :twisted: :twisted: :twisted: :twisted: :twisted: :twisted: :twisted: :twisted: :twisted: :twisted: :twisted:

gobbo

The JavaCompiler Man!!!

hauahauahauhuahaua
comedia

sergiotaborda

Sim e não.

O ResultSet tem o comando beforeFirst() que reseta o cursor para o inicio do resultado.
Mas isso só funciona se o ResultSet foi criado permitindo isso. ( o que normalmente acontece se vc não escolher nenhuma outra opção) . Veja os métodos de connection que criar statements e preparedstatements. Lá tem opções para aumentar a eficiencia do resutlset.

Por outro lado, se vc está criando objetos a partir do resultSet não itere o resultSet de novo, itera a lista dos objetos criados. É muito mais rápido e vc pode criar um resultSet mais eficiente com os parametros que falei antes.

gobbo

sergiotaborda:

O ResultSet tem o comando beforeFirst() que reseta o cursor para o inicio do resultado.
Mas isso só funciona se o ResultSet foi criado permitindo isso. ( o que normalmente acontece se vc não escolher nenhuma outra opção) . Veja os métodos de connection que criar statements e preparedstatements. Lá tem opções para aumentar a eficiencia do resutlset.

.

depende do Statement?

pyro

Pessoal vlw, tá rodando aqui.

fabim

O ResultSet tem o comando beforeFirst() que reseta o cursor para o inicio do resultado.
Mas isso só funciona se o ResultSet foi criado permitindo isso. ( o que normalmente acontece se vc não escolher nenhuma outra opção).

Incorreto.
Se vc nao explicitar o tipo do ResultSet, ele sera TYPE_FORWARD_ONLY por default e a tentativa de rolar resultados pra tras ira falhar.

http://java.sun.com/j2se/1.4.2/docs/api/java/sql/Connection.html#prepareStatement(java.lang.String)

sergiotaborda

Não, mas é no método de criação dele que vc indica esses parametros. Acontece que o statement é o factory do resultSet então ele tem que ser configurado para criar o RS corretamente.

fabiocsi:
sergiotaborda:

Mas isso só funciona se o ResultSet foi criado permitindo isso. ( o que normalmente acontece se vc não escolher nenhuma outra opção).

Verdade. :oops:

pyro

Realmente a principio parecia que iria funcionar, mas o beforeFirst() também não rolou. :lol:

Gobain

Vc lembrou de ao criar o seu statement setar o resultset como type scroll insensitive?

connection.createStatement(ResultSet.CONCUR_UPDATABLE,ResultSet.TYPE_SCROLL_INSENSITIVE);
gobbo

sergiotaborda:
gobbo:

depende do Statement?

Não, mas é no método de criação dele que vc indica esses parametros. Acontece que o statement é o factory do resultSet então ele tem que ser configurado para criar o RS corretamente.

entao depende uai!!! hauahauahah

jgbt

so completando o que ja foi dito:
Para vc navegar novamente em um ResultSet, vc precisa cria-lo de maneira que habilite essa opção, como foi mostrado.
O detalhe que isso esta definido na especificação JDBC, e depnde da implementação que vc esta usando.
Ou seja, isso so funciona corretamente em alguns drivers JDBC. Alguns drivers não implementam corretamente toda as funcionalidades da especificação.
Vc vai precisar dar uma olhada nas docs do driver que vc esta usando.

[]´s

gobbo

jgbt:
so completando o que ja foi dito:
Para vc navegar novamente em um ResultSet, vc precisa cria-lo de maneira que habilite essa opção, como foi mostrado.
O detalhe que isso esta definido na especificação JDBC, e depnde da implementação que vc esta usando.
Ou seja, isso so funciona corretamente em alguns drivers JDBC. Alguns drivers não implementam corretamente toda as funcionalidades da especificação.
Vc vai precisar dar uma olhada nas docs do driver que vc esta usando.

[]´s

realmente…

fabim

[quote=Gobain]Vc lembrou de ao criar o seu statement setar o resultset como type scroll insensitive?

connection.createStatement(ResultSet.CONCUR_UPDATABLE,ResultSet.TYPE_SCROLL_INSENSITIVE);

> 2 errors found:

  • Falta passar a String que é o sql
  • Os outros 2 parametros estao em ordem trocada: primeiro vem o TYPE.
gobbo

The Human JavaCompiler ^^^^^^^^
hauahauha
esse forum soh tem peça rara!!!

Gobain

fabiocsi:

> 2 errors found:

  • Falta passar a String que é o sql
  • Os outros 2 parametros estao em ordem trocada: primeiro vem o TYPE.

O sql pode ser passado na hr do statement.executeQuery(“sql”), então não é um erro :slight_smile:

O type eu nem atentei pra ordem, então falha minha mesmo :thumbup:

Criado 7 de maio de 2008
Ultima resposta 8 de mai. de 2008
Respostas 22
Participantes 8