Multiplos ResultSet

17 respostas
D

eae…

alguem sabe se o Java suporta vários ResultSet rodando simultaneamente? sem ter q fechar um pra executar o outro?

olha o código abaixo… nao funciona…

String VSql = "Select * from tabela1";
String VSql2 = "Select * from tabela2";

ResultSet rs, rs2;

rs = MySQL.executeQuery(VSql);
rs2 = MySQL.executeQuery(VSql2);

while(rs.next())
{
     ...
     ...

     while(rs2.next())
     {
          ...
          ...
      }
}

isso nao funciona… e apresenta o seguinte erro:

javax.servlet.ServletException: Operation not allowed after ResultSet closed

alguem tem alguma luz? :idea: :idea:
pq eu preciso fazer varias consultas sendo q nao posso fechar nenhum dos ResultSet.

valeu!

17 Respostas

D

alguem tem alguma luz? :idea: :idea: :idea:

H

Acho que essa excessão não tem nada a ver com dois ResultSet’s abertos, você deveria debugar a aplicação para onde exatamente está dando o erro.

D

e como q eu debugo um JSP?

Valeu

H

Esses ResultSet’s estão no JSP ???

D

estao num JSP sim…

pq? muda alguma coisa?

Abraços!

H

Porque vc não coloca essa parte de acesso a Banco em uma classe separada, fica mais fácil até de achar erro !!!

D

eu tenho uma classe separada…
mas q só faz a conexao e declara 1 ResultSet…

e eu to incluindo essa classe nos JSP’s q tem conexao com banco de dados

D

ahhhhhh!!

nao vai de jeito nenhum isso aki!!

Heber, eu acho q o erro ta na parte q eu incio o segundo ResultSet sim.

eu fiz varios testes e essa bagaça nao funciona!

D

galera…
vo especificar melhor a minha duvida pra ver se ajuda…

o q eu preciso é fazer 2 querys ao mesmo tempo!
pq ao mesmo tempo? pq o resutados de uma query, vai servir para escrever a segunda query… e a cada volta do looping, a query muda.
logo preciso de 2 ResltSet nao é? ou estou errado?

o fato é q nao estou consguindo usar 2 ResultSet… acontece um erro, q ta postado no primeiro post deste tópico…

se alguem puder ajudar, por favor, preciso disso urgente! :oops:

obrigado!

E

ow veio

eu acho que sei o que ta acontecendo…

vamos que sua query1 tenha 10 linhas e sua query2 tenha 5 linha

o primeiro while vai até 10 e outro até 5.

porém no 1º passada do while ele varre a query2 e vai para a 2º passada da query1.
Ai quando ele vai de novo do while da query2 ela não tem mais registro, esta fechada ai a excessão.
Para solucionar você abrir a query a cada while da query1.

acho que sei o q vc quer fazer.

ve c te ajudo

tente isso primeiro

String sSQL1 = "SELECT * FROM TABELA1";

 rs = MySQL.executeQuery(sSQL1); 
 while(rs.next())
 {
   String sSQL2 = "SELECT * FROM TABELA2";   
   rs2 = MySQL.executeQuery(sSQL2); 
   while(rs2.next())
   {
    }
 }

ou ainda caso vc queira relacionar a tabela1 com a tabela2

String sSQL1 = "SELECT * FROM TABELA1";

 rs = MySQL.executeQuery(sSQL1); 
 while(rs.next())
 {
   String sSQL2 = "SELECT * FROM TABELA2 \n";   
   sSQL2 += "WHERE CAMPO2 = " + rs.getString("CAMPO1");
   rs2 = MySQL.executeQuery(sSQL2); 
   while(rs2.next())
   {
    }
 }

naum se ajudei, mais tentei

flow

D

edgardksb,
Valeu mesmo cara, mas nao funcionou esse esquema nao… hehehe

mas ajudou mto, pq com isso eu tive a ideia de criar outro Statement pra trabalhar junto com o segundo ResultSet q eu ja tinha criado…

nao sei se essa foi a solução mais inteligente, pq uma vez q ja está feita a conexao com o banco, nao precisaria ficar abrindo novos Statemente junto com novos ResultSet nao é verdade?

mas como eu preciso terminar isso pra hj, tive q apelar pra essa gambia mesmo de criar novos Statement cada vez q eu precisar fazer querys aninhadas…

valeu mesmo pela ajuda cara!!

C

Oi, vc precisa de um Statement para cada resultset que vai manter aberto. Isso porque esses dois objetos são intimamente ligados, então, quando vc executa outra query no mesmo statement, o anterior vai ser fechado e vc não vai conseguir percorre-lo.

Até.

D

cancao,
valeu pela explicação cara!
eu só tinha criado outro Statement mas foi pra testar só… e funcionou, mas eu nao entendi o pq!
e agora com seu post, deu pra entender perfeitamente…

entao sempre q eu tiver q trazer resultados de duas buscas por looping e tendo whiles aninhados eu vo precisar criar um Statement e um ResultSet pra cada query??

pq achei meio sem sentido criar 2 ojetos pra fazer 1 ação… achava q adicionando ResultSet’s ja daria certo, uma vez q ja havia um Statement conectado ao banco.

mas agora entendi q nao é bem assim… hehehe

valeu pela explicação! :smiley: :smiley: :smiley:

E

ow meu.

mas tipo assim c vc tiver duas querys com 10 linha de resultado, por exemplo você pode fazer assim…

String VSql = "Select * from tabela1"; 
String VSql2 = "Select * from tabela2"; 

ResultSet rs, rs2; 

rs = MySQL.executeQuery(VSql); 
rs2 = MySQL.executeQuery(VSql2); 

while(rs.next()) 
{ 
     ... 
     ... 

     rs2.next();
     ... 
     ... 

}

ai a cada registro da query1 que vc pega ele pega 1 da query2 tb.

ai vc faz alinhado.
blz.

flow

D

edgardksb, valeu por estar me ajudando!!
o pessoal do PJ é demais!

mas entao…
esse ultimo exemplo q vc postou, nao funciona… era o q eu tava tentando fazer desde o inicio… olha la no meu primeiro post…

mas agora ja ta resolvido, só criando outros Statement junto com ResultSet…

só nao entendo mto o pq disso…
e eu queria saber se toda vez q eu precisar usar outros ResulSet’s eu vou ter q cirar os respectivos Statement?

Valeu a todos!!

I

Isso ocorre por que você está se referenciando a um Statement fora do metodo, crie um Statement dentro de metodo que podera usar recordset dentro de recordset normalmente…

Exemplo:

public ResultSet executeQuery (String strsql) throws Exception {
	Statement stm = cn.createStatement();
    return stm.executeQuery(strsql);
}
D

Bem Vindo ao PJ Infiltrate!!

hehehhe…
vc desenterrou um tópico de mais de 1 ANO :razz: … hhehhe…

pelo menos deu pra ver que em 1 ano e 3 meses eu evoluí MTO com java… hehehe…

abraços

Criado 27 de abril de 2004
Ultima resposta 2 de jun. de 2005
Respostas 17
Participantes 5