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?
Realizar um while() em um ResultSet mais de uma vez
22 Respostas
while() ???
Não seria next() o que você quer dizer?
tb me pareceu eskisito…
O k realmente queres dizer?
é soh fazer ambas as coisas que voce queria fazer em whiles diferentes, no mesmo while
É 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?
while(rs.hasnext()){
codigo aki
}
while(rs.hasNext()){
//codigo aki
}
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
}
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:
The JavaCompiler Man!!!
hauahauahauhuahaua
comedia
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.
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?
Pessoal vlw, tá rodando aqui.
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)
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.
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:
Realmente a principio parecia que iria funcionar, mas o beforeFirst() também não rolou. :lol:
Vc lembrou de ao criar o seu statement setar o resultset como type scroll insensitive?
connection.createStatement(ResultSet.CONCUR_UPDATABLE,ResultSet.TYPE_SCROLL_INSENSITIVE);
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
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
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…
[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.
The Human JavaCompiler ^^^^^^^^
hauahauha
esse forum soh tem peça rara!!!
> 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 
O type eu nem atentei pra ordem, então falha minha mesmo :thumbup: