java.sql.SQLException: Operation not allowed after ResultSet closed  XML
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Autor Mensagem
formigaotts
Debugger
[Avatar]

Membro desde: 13/12/2006 19:04:14
Mensagens: 60
Offline

estou com um problema de SQLException, ele carrega aproximadamente 90 mil registros depois gera excessão e pára na linha 9,
se tiver idéia do que seja ficarei agradecido.

Excessão:

java.sql.SQLException: Operation not allowed after ResultSet closed
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
at com.mysql.jdbc.ResultSetImpl.checkClosed(ResultSetImpl.java:768)
at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:812)
at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5528)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5448)
at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5488)
at db.MembroDao.obterMembrosConsulta(MembroDao.java:369)
at Frame.FramePrincipalCruzamentos.pesquisar(FramePrincipalCruzamentos.java:322)
at Frame.FramePrincipalCruzamentos.access$0(FramePrincipalCruzamentos.java:192)
at Frame.FramePrincipalCruzamentos$1.actionPerformed(FramePrincipalCruzamentos.java:457)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Código:



ricoldi
JavaEvangelist
[Avatar]

Membro desde: 04/11/2007 19:11:40
Mensagens: 414
Localização: Ribeirão Preto - SP
Offline

Fala formigaotts,

Erro estranho.. porque ele fala que o resultset esta fechado...
Então cara... meio por cima assim eu não intendi muito, mas deixa eu perguntar...

Ele roda esse laço 90mil vezes? e ai depois para?

Você viu que a excessão esta dando no getString()?

Att
Ricoldi

*Todo post expressa minha opinião e não uma verdade inquestionável*
formigaotts
Debugger
[Avatar]

Membro desde: 13/12/2006 19:04:14
Mensagens: 60
Offline

sim, ele roda o while 90 mil vezes ai quando lança a excessão ele me retorna os 80 mil registros normalmente..
sim, eu vi onde está a excessão, porém não dá para saber o porque.

ricoldi wrote:Fala formigaotts,

Erro estranho.. porque ele fala que o resultset esta fechado...
Então cara... meio por cima assim eu não intendi muito, mas deixa eu perguntar...

Ele roda esse laço 90mil vezes? e ai depois para?

Você viu que a excessão esta dando no getString()?

Att
Ricoldi
ricoldi
JavaEvangelist
[Avatar]

Membro desde: 04/11/2007 19:11:40
Mensagens: 414
Localização: Ribeirão Preto - SP
Offline

Não sei se tem algo a ver mais um amigo aqui do trampo disse para você tentar dar um rs.first() no resultset antes de começar o while.

ps? perguntinha da galera... 90mil registros? car**o o que tem nessa tabela?


Att
Ricoldi.

*Todo post expressa minha opinião e não uma verdade inquestionável*
Artur Drummond
Debugger

Membro desde: 13/09/2006 20:58:58
Mensagens: 66
Offline

bom ... pela quantidade de registros, será que é necessário trazer TODOS os 90 mil em uma única query ?


Tenta fazer o seguinte: Muda a sua query e fala pra retornar a partir da posição que deu o problema -1 . No caso, se foi na posição 80 mil, começa a partir da 79999 até o 90000.

Ve se fazendo isso ele para de dar erro e consegue processar.

Vlw

This message was edited 1 time. Last update was at 07/08/2008 07:50:30


SCJP 5.0 (2009)
SCWCD 5.0 (2010)
[Email] [MSN]
formigaotts
Debugger
[Avatar]

Membro desde: 13/12/2006 19:04:14
Mensagens: 60
Offline

então, preciso fazer em somente uma query, para facilitar as consultas, e também em duas querys não seria meio gambits?
bom, eu contei a quantidade de registros dentro do ResultSet está certo, 162 mil, porém não consigo adquirir todos.
outra curiosidade é que as vezes muda a exception, dá NullPointerException, depois volta essa excessão que postei anteriormente, e também muda sempre o valor da iteração do erro, varia de 90 mil à 105 mil...
vou verificar se existe algum limite de registros no ResultSet.
bom qualquer coisa estamos aí.
valeu!

Artur Drummond wrote:bom ... pela quantidade de registros, será que é necessário trazer TODOS os 90 mil em uma única query ?
Tenta fazer o seguinte: Muda a sua query e fala pra retornar a partir da posição que deu o problema -1 . No caso, se foi na posição 80 mil, começa a partir da 79999 até o 90000.

Ve se fazendo isso ele para de dar erro e consegue processar.

Vlw
formigaotts
Debugger
[Avatar]

Membro desde: 13/12/2006 19:04:14
Mensagens: 60
Offline

continua o problema, entre os varios tipos de excessão vai mais uma pra se alguem já tiver passado por esse problema da um help ae.

java.lang.NullPointerException
at com.mysql.jdbc.ResultSetImpl.setRowPositionValidity(ResultSetImpl.java:830)
at com.mysql.jdbc.ResultSetImpl.next(ResultSetImpl.java:7046)
at db.MembroDao.obterMembrosConsulta(MembroDao.java:367)
at frame.FramePrincipalCruzamentos.pesquisar(FramePrincipalCruzamentos.java:315)
at frame.FramePrincipalCruzamentos.access$0(FramePrincipalCruzamentos.java:185)
at frame.FramePrincipalCruzamentos$1.actionPerformed(FramePrincipalCruzamentos.java:450)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
italo.vendrameto
JavaChild
[Avatar]

Membro desde: 21/09/2006 06:44:48
Mensagens: 119
Localização: Curitiba - PR
Offline

Cole o código do método, todo e não apensa essa bloco que vc mostrou no inicio do tópico, acredito que seu erro seja em virtude outra coisa.
formigaotts
Debugger
[Avatar]

Membro desde: 13/12/2006 19:04:14
Mensagens: 60
Offline

italo.vendrameto wrote:Cole o código do método, todo e não apensa essa bloco que vc mostrou no inicio do tópico, acredito que seu erro seja em virtude outra coisa.

victorwss
JWizard
[Avatar]

Membro desde: 18/12/2007 14:46:00
Mensagens: 2409
Localização: São Paulo - SP
Offline

Isso parece algum tipo de problema causado por um OutOfMemoryError dentro do MySQL.

Ah, por sinal, lembre-se de fechar seus ResultSets em um finally.

Victor Williams Stafusa da Silva

Bacharel em Ciência da Computação - UFMT // Especialista em Desenvolvimento Java - CEFET/MT // Doutorando em Ciência da Computação - IME-USP
SCJP 6.0 - 19/12/2007 - PASS - 88% // SCWCD 5 - 17/05/2008 - PASS - 79% // SCJA - 09/09/2008 - PASS - 96% // SCSNI - 30/06/2009 - PASS - 68% // SCBCD 5 - 31/05/2010 - PASS - 95%
Próximos: SCJD (encalhado com o projeto), SCEA parte I (estudando). Algum dia desses: SCMAD, OCA, SCEA e SCDJWS.

Computação: uma ciência holística e esotérica!
E então veio Deus a terra e disse aos homens: Não dividireis por zero.
XML is a giant step in no direction at all. (Erik Naggum)
Arquitetura de sistemas: Eu prefiro ser essa metamorfose ambulante do que ter aquela velha opinião formada sobre tudo.
Diga não as drogas: Não use java.util.Vector.
Cuidado: Este usuário pode ter temperamento agressivo.

Always code as if the person who will maintain your code is a maniac serial killer that knows where you live.
I am the maniac serial killer that knows where you live who will maintain your code.


É impossível falar de CMMI (Capability Maturity Model Integration) sem saber o que é CIMM (Capability Im-Maturity Model).


Se você escreve "concerteza", "concerteza" você andou matando aulas de português.
[MSN]
formigaotts
Debugger
[Avatar]

Membro desde: 13/12/2006 19:04:14
Mensagens: 60
Offline

aumentei os valores XMx e XMs da JVM e deu certo!
valeu pessoal.

victorwss
JWizard
[Avatar]

Membro desde: 18/12/2007 14:46:00
Mensagens: 2409
Localização: São Paulo - SP
Offline

formigaotts wrote:aumentei os valores XMx e XMs da JVM e deu certo!
valeu pessoal.



Isso não resolve o problema, apenas o adia. Ao invés de ocorrer com 80 mil registros vai começar a ocorrer com 800 mil, 8 milhões, sei lá.

O problema é o fato de você colocar todos estes elementos em uma lista monstruosamente gigantesca devorando a sua memória. O certo seria mudar a abordagem e puxar um de cada vez, trabalhar com ele e descartá-lo, puxando o próximo em seguida, ou então trabalhar com algum tipo de paginação.

This message was edited 1 time. Last update was at 12/08/2008 08:35:25

[MSN]
 
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Ir para:   
Powered by JForum 2.1.8 © JForum Team