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…
StringVSql="Select * from tabela1";StringVSql2="Select * from tabela2";ResultSetrs,rs2;rs=MySQL.executeQuery(VSql);rs2=MySQL.executeQuery(VSql2);while(rs.next()){......while(rs2.next()){......}}
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
DanielBadawiPJ
e como q eu debugo um JSP?
Valeu
H
HeberPJ
Esses ResultSet’s estão no JSP ???
D
DanielBadawiPJ
estao num JSP sim…
pq? muda alguma coisa?
Abraços!
H
HeberPJ
Porque vc não coloca essa parte de acesso a Banco em uma classe separada, fica mais fácil até de achar erro !!!
D
DanielBadawiPJ
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
DanielBadawiPJ
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
DanielBadawiPJ
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
edgardksbPJ
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
StringsSQL1="SELECT * FROM TABELA1";rs=MySQL.executeQuery(sSQL1);while(rs.next()){StringsSQL2="SELECT * FROM TABELA2";rs2=MySQL.executeQuery(sSQL2);while(rs2.next()){}}
ou ainda caso vc queira relacionar a tabela1 com a tabela2
StringsSQL1="SELECT * FROM TABELA1";rs=MySQL.executeQuery(sSQL1);while(rs.next()){StringsSQL2="SELECT * FROM TABELA2 \n";sSQL2+="WHERE CAMPO2 = "+rs.getString("CAMPO1");rs2=MySQL.executeQuery(sSQL2);while(rs2.next()){}}
naum se ajudei, mais tentei
flow
D
DanielBadawiPJ
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
cancaoPJ
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
DanielBadawiPJ
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!
E
edgardksbPJ
ow meu.
mas tipo assim c vc tiver duas querys com 10 linha de resultado, por exemplo você pode fazer assim…
StringVSql="Select * from tabela1";StringVSql2="Select * from tabela2";ResultSetrs,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
DanielBadawiPJ
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
infiltratePJ
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…