Iterator?

5 respostas
thiagorani

Pessoal,

Tem como atribuir o conteudo de um ResultSet a um Iterator?
Como?

[]´s

5 Respostas

wbsouza

Não entendí para o que vc quer isto. Se vc quer algo do tipo um ResultSet desconectado do banco, talvez o CachedRowSet da SUN te resolva o problema. Ele fica no pacote “sun.jdbc.rowset”. Nao sei se ele vem no jdk1.4. De qualquer forma no Site da SUN vc encontra. Outra saída é usar um Vector e adicionar os beans dentro do vector (ele tem um metodo que te retorna um Iterator ou Collection), sendo cada bean uma cópia do seu registro do ResultSet. Só uma dica, em aplicações web evite colocar ResultSets muito extensos nestas estruturas, caso contrário, poderá ter graves problemas de performance uma vez que vários usuários podem estar criando/acessando estas estruturas.

[]s, Welington B. Souza

thiagorani

É por isso mesmo que estou querendo usar isso!
Além disso estou com o problema de muitos ResulSets abertos, que acabam travando a minha aplicação! Alguma sugestão?
Nao estou muito ligado nesse iterator, apenas quero colocar o conteudo do resultset em uma estrutura mais amigavel e de forma transparente, sem necessitar de um loop e add? Alguma sugestão?
valeu.

[]´s

wbsouza

OK, com o CachedRowSet dá pra carregar rapidamente de maneira + transparente possível, no entanto não será um Iterator. É uma classe muito parecida com o ResultSet, só que desconectado. Uma boa dica para resolver o problema de muitos ResultSets abertos é utilizar um Connection Pool, pois ele evita que o ResultSet fique “pendurado”, pois depois de algum tempo inativo, o Connection Pool, faz um release automático do Connection, resgatando a conexão para sí, evitando assim um monte de usuários conectados no banco (na maneira tradicional se vc nao tomar cuidado vai acontecer isto).

A segunda maneira, se vc quiser um Iterator (uma forma mais amigável, principalmente para uma camada de apresentação do modelo MVC) talvez seja melhor uma coleção de beans e carregar os beans manualmente na camada Model.

De qualquer forma o Connection Pool, deverá ser aplicado nas duas situações.

[]s, Welington B. Souza

thiagorani

Como seria essa Connection Pool?
Tem um exemplo?

[]´s

wbsouza

O tomcat já vem com um Connection Pool. Veja um trecho de codigo que pega uma conexao do Connection Pool.

DataSource ds = (DataSource)initCtx.lookup(jndiName);
Connection conn = ds.getConnection();

Obs:

  • As configurações do datasource deverão estar no arquivo server.xml do tomcat. Na administração do tomcat (via browser) tem como adicionar uma nova configuração de DataSource.

  • A variável jndiName é uma string que indica o nome a ser localizado dentro do server.xml do tomcat.

  • Este DataSource configurado no tomcat ficará disponível para qualquer aplicação web dentro do container.

  • Quando vc fizer um “conn.close()” a conexão será automaticamente liberada para o pool de conexões, e não será fechada como aparentemente o metodo indica.

Mais informações sobre o assunto vá na documentação do Tomcat.

Se tiver utilizando outro container, dê uma olhada na documentação do seu container.

Outra opção é usar um Connection Pool que não é implementado pelo container. Tem um muito bom, que inclusive já utilizei. Trata-se do “Java Exchange DbConnection Broker” em http://www.javaexchange.com/

Criado 30 de abril de 2003
Ultima resposta 30 de abr. de 2003
Respostas 5
Participantes 2