Toda vez que tento usar um ResultSet, a aplicação lança uma exception dizendo q o ResultSet is closed. Porque será que isso começou a acontecer de uma hr para outra, a tabela que estou pesquisando está normal…Valew.
Mande o trecho de código pra gente ver…
Alguma variável pode estar perdendo seu valor em algum
momento…
:arrow: 1. Você fechou a conexão?
:arrow: 2. Você fechou o Statement/PreparedStatement que construiu aquele ResultSet?
Se a resposta para qualquer uma das questões tiver sido sim, então este é o problema.
Geralmente isso acontece se vc tiver usando um connection pool, e a sua aplicação ficar sem fazer nada durante algum tempo o banco de dados. Daí o connection pool fecha as conexões com o banco, e volta a conexão que vc estava usando para o pool. Isto é uma maneira de garantir que mesmo que vc se esqueça de fazer este trabalho, não haverá um crash na sua aplicação por falta de recursos no container (conexão de bd à sua disposição).
A idéia é a seguinte:
Abra o ResultSet, e carrege o conteúdo dos registros para uma collection; Geralmente é usado uma coleção de VOs, e em seguida libere os recursos de banco (ResultSet, Statement e Connection) para atender outra requisição que irá acontecer.
[]s, Welington B. Souza
valew mesmo galera, realmente eu estava fechando a conexao antes(na classe), construi um metodo que fecha tudo(resultset, statement, conection) e chamei ele no jsp. Problema resolvido. Agora só estou de cara com a String q me retorna um campo ntext. alguem sabe getOque eu devo chamar para um ntext? valew.
Ahhh!! Você é o cara que estava com problema para pegar um campo ntext, não? Use o método ResultSet.getUnicodeStream(int columnindex). Segundo o manual do driver JDBC para SQLServer 2000 da Microsoft, o campo ntext é mapeado como um LONGVARCHAR do JDBC. Descobri isso estes dias também. Eu não testei, mas, se você fizer o teste, diga para nós aqui do GUJ o resultado.
[editado] Opa, acabei de notar no Javadoc que não recomendam o uso do método getUnicodeStream(int) (deram um status de deprecated a ele). Então acho que você vai ter que usar um ResultSet.getCharacterStream(String columnname) para obter este seu campo ntext.
[/editado]