Copia de ResultSet?

5 respostas
thiagorani

Como fazer uma copia de um ResultSet?
Fazer uma copia dos dados de um ResultSet e utilizar essa copia na camada de apresentação e nao o ResulSet?

[]´s

5 Respostas

ars-rs

Dê uma olha na interface RowSet. Uma de suas implementações - CachedRowSet - faz exatamente o que vc deseja. Ela faz parte de drivers que seguem a especificação JDBC 3.0 e de alguns que seguem a JDBC 2.0. No site da Sun tem uma implementação tb.

massardi

Ja tentou usar um vetor???
Vc tambem pode usar outra classe(objeto) para quardar junto com Vector.

thiagorani

massardi,

Queria algo mais transparente! To ligado na estrutura de vetores, mas queria algo que fosse um ResultSet “desconectado”, saco? :wink:

[]´s

cv1

Não existe nada muito similar a um ResultSet “desconectado” pq isso fere o padrão MVC… Sua visualizacao ia acabar sabendo demais do teu modelo. Entao, de uma ollhada nuns patterns (value object, value list handler, paged set iterator, etc e tal) que vai ajudar :slight_smile:

dukejeffrie

Mas poxa, se vc já caiu no JDBC, vc tem duas opções:

  1. seu ResultSet fica aberto e cada vez que vc precisa vc lê do banco
  2. todo o seu conjunto de resultados (ResultSet não tem esse nome à toda) é lido do banco e vai pra alguma memória. Provavelmente a RAM.

Pra vc desconectar do banco, vc tem que

  1. ler tudo
  2. conectar de novo a cada leitura

Nem todos os bancos permitem que vc faça uma query para pegar “a partir de fulano”. Além disso, vc pode ter problemas de consistência se dependendo da sua query (por exemplo, se vc conecta a cada leitura e alguém insere um registro entre o 34 e o 35, vc pode acabar lendo o 35 (antigo 34) duas vezes).

Normalmente, se meu conjunto de dados é pequeno, eu monto uma lista. A lista pode ser de mapas ou de uma classe que eu bolei. Vc pode fazer a mesma coisa: ter uma classe que, a cada next(), retorna um objeto ou um Map com o próximo resultado. Como ela vai funcionar internamente é problema do Model, o view só precisa saber disso. Esse é um iterator, aliás vc pode até implementar Iterator ou Enumeration pra esconder mais ainda as coisas.

boa sorte!!

Criado 19 de maio de 2003
Ultima resposta 20 de mai. de 2003
Respostas 5
Participantes 5