Conexao fechada - ResultSet null

Oi pessoal, mais uma dúvida. Quando eu realizo uma consulta no BD logo eu armazeno o resultado desta em um objeto ResultSet, no entanto eu se eu fechar o objeto Connection utilizado eu perco todo o conteúdo do meu ResultSet, pois este fica como null. Então, a pergunta é como eu faço para fazer uma consulta colocar o resultado em um ResulSet e liberar logo depois da consulta a Conexao, sem perder o conteudo do meu ResultSet.
Valeu pessoal …
Otávio

Nao libere a conexao antes de processar o ResultSet…

Rafael

Você pode criar um bussiness que possa conter os campos da consulta. Após recuperação, vai empilhando em um Vector. Assim você cria um vector que vai ser equivalente ao resultado da consulta, dispensando o resultset após a coleta de resultados, podendo liberar a conexão logo após a montagem do vector.

Normalmente faço isso em DAO e recupero em controller.

Fui clara?

Bjos
Claire

Pq vc usa Vector ao inves de um ArrayList?

Rafael

Pq ArrayList não é sincronizada… E eu preciso passar pela sessão. E criar um ArrayList Sincronizado daria na mesma que criar um vector.

Mas, como estou só no começo, posso estar errada…

Bjos
Claire

O pessoal do GUJ (cv, Rafael Steil, …) têm sérios problemas (até pessoais) com Vector.
Heheheheheh

Pois é… eu percebi…
Já não é a primeira vez que explico porque uso Vector invés de ArrayList…
Mas, gente… Pra que tanto ódio neste coraçãozinho??? rss :stuck_out_tongue:
Que que tem demais um vectorzinho… não machuca ninguém…
rss

Bjos
Claire

“Pasar pela sessao” vc diz, uma HttpSession ?

Rafael

Isso…

Sincronização só é problema se voce for modificar o ArrayList, caso contrario o ideal éutilizar uma lista imutavel para forçar essa condição.

Eu tenho problemas com colections sincronizadas pq em 90% dos casos a sincronização que elas providenciam não me resolvem.

Na versao 1.5 do JDK a gente pode definir o tipo de dados que vai e sai de uma Collection, certo?

[quote=“louds”]Sincronização só é problema se voce for modificar o ArrayList, caso contrario o ideal éutilizar uma lista imutavel para forçar essa condição.

[/quote]

Nao vi um lugar dizendo explicitamente ( pelo menos nao um totalmente confiavel ) que HttpSession’s sao ou deixam de ser Thread Safe… o que me parece eh que uma session eh associada pelo Container a um usurio em especifico, nao sendo ela de forma alguma compartilhada entre threads nao interligadas…
Ta certo isso? pq jogar todos os dados na session em alguma lista ja sincronizada me parece meio estranho ( mas mta coisa me parece estranha, de qq maneira )… nao seria melhor sincronizar a chamada que fosse atlerar o conteudo apenas?

Rafael

No no no. :slight_smile:

Um ArrayList passado pelo Collections.unmodifiableList() ainda eh mais leve do que um Vector, por incrivel que pareca… alem, claro, de vc ficar com a API nova (que tem nomes de metodos bem menos horriveis do que Vector, Hashtable, Enumeration e Dictionary). :smiley:

Sim, eh pra isso que servem os generics, basicamente.

Leremos a API do ArrayList

http://java.sun.com/j2se/1.4.2/docs/api/java/util/ArrayList.html

(primeiro paragrafo).

“Resizable-array implementation of the List interface. Implements all optional list operations, and permits all elements, including null. In addition to implementing the List interface, this class provides methods to manipulate the size of the array that is used internally to store the list. (This class is roughly equivalent to Vector, except that it is unsynchronized.)”

(quinto paragrafo).

“Note that this implementation is not synchronized. If multiple threads access an ArrayList instance concurrently, and at least one of the threads modifies the list structurally, it must be synchronized externally.”

======
Daniel Machado, estágiario desenvolvedor em JSP.
Ou seja, menos que nada.