ResultSet x ArrayList

Quais os prós e contras dos dois métodos?

Velocidade, performance, fechamento da conexão com o banco. Qual comando (SQL) deve-se usar nos mesmos para permitir a compactação da base de dados, uma vez que dando uma simples instrução SELECT em alguma tabela, ocasiona um erro quando se tenta compactar o diretório da base usando algo como o WinRar.

Hã :hunf: ? Dá pra ser menos confuso :?:

Realmente… Não entendi bulhufas.

No início, achei que você estivesse perguntando se seria melhor mexer com os dados da aplicação diretamente no ResultSet, ou se seria melhor passá-los pra um ArrayList. Depois entrou papo de compactação e tal…

É exatamente isto, só misturei um pouco os assuntos. Vamos separar as coisas.

  1. É claro que com os dados numa ArrayList carregados na memória serão acessados muito mais rapidamente do que uma consulta direta ao banco através de um ResultSet (lembrando que isto depende muito do tamanho da tabela, pois se esta tem um tamanho de 200MB, difícil mas não impossível, isto já deve ser um problema). Por isto quero saber o melhor dos dois em cada caso (para ser mais preciso, na parte de navegação de dados).

  2. Quando uso um SELECT no banco tenho problemas para compactar o diretório da base de dados, o compactador diz que o arquivo está sendo usado por outra aplicação. Este arquivo é o referente a tabela consultada. Como faço para evitar isto (fecho os ResultSet’s e os PreparedeStatement’s, mas o erro persiste).

Valeu pela resposta.

Esse ponto envolve dois fatores: bom senso e necessidades do desenvolvedor. Armazenar os dados em um ArrayList envolve vários princípios de design e de modelagem, que levam tempo para serem aprendidos. Esse tempo será reposto quando você precisar efetuar mudanças na sua aplicação. Entretanto, se você não precisar de tudo isso, pode manipular diretamente o seu ResultSet. Mas 200MB de dados serão pesados não importando a técnica usada, e obviamente que eles não devem ser trazidos para a aplicação de uma vez só.

Que banco você tá usando? Como é o processo de compactação?

Abraços

[quote]Esse ponto envolve dois fatores: bom senso e necessidades do desenvolvedor. Armazenar os dados em um ArrayList envolve vários princípios de design e de modelagem, que levam tempo para serem aprendidos. Esse tempo será reposto quando você precisar efetuar mudanças na sua aplicação. Entretanto, se você não precisar de tudo isso, pode manipular diretamente o seu ResultSet. Mas 200MB de dados serão pesados não importando a técnica usada, e obviamente que eles não devem ser trazidos para a aplicação de uma vez só.
[/quote]
Novamente pela apostila da Caelum e pelo que já implementei, vi que o código fica muito mais limpo e tratável para posterior alteração, mas a parte dobom senso eu já esperava que fosse citada. Vou procurar mais sobre disign e modelagem

Sobre o banco, uso o MySql 4.01, mas vou instalar o 5.0 esses dias.

[quote=Inacio Alves]
Novamente pela apostila da Caelum e pelo que já implementei, vi que o código fica muito mais limpo e tratável para posterior alteração, mas a parte dobom senso eu já esperava que fosse citada. Vou procurar mais sobre disign e modelagem[/quote]
Acredito que estudar um framework de persistência (como o Hibernate) é um ótimo passo inicial para estudar modelagem, pois você precisa definir as entidades. Daí, já puxa para outros temas, como Domain Driven Design e princípios de análise. Faça uma busca no fórum que você encontrará ótimas discussões sobre o assunto.
Abraços

Estou usando o banco MySql 4.01 e aa compactação é feita diretamente no diretório do banco usando o WinRar.

O problema é que o WinRar reporta que as tabelas estão sendo usadas por outra aplicação.

PS. O mesmo problema ocorre se eu apenas usar um select pelo prompt e logo em seguida tentar compactar o diretório.

Tb ja estive nessa situação tinha um banco de 150MB tinha que fazer cosultas na tabela de contas a receber que tinha aproximadamente 50 mil registro
quando tentava carregar tudo na memoria a consulta fica muito lenta e depois sempre fica alguns fragmentos na memoria,
optei por trazer por demanda um pouco de cada vez ai melhorou o desempenho 100%

Sobre não conseguir compactar depois de um select certamente o select ainda esta na memoria do servidor
seu select traz uma quantidade de dados consideravelmente grande??? pode ser que ele esteja usando uma especie de setFetchSize;
ou seu select pode estar entrando em recursividade???
solução não muito viavel mas garanto que resolve restarta o servidor do banco :smiley: hehehehehe…

[quote=alexborges]Sobre não conseguir compactar depois de um select certamente o select ainda esta na memoria do servidor
seu select traz uma quantidade de dados consideravelmente grande??? pode ser que ele esteja usando uma especie de setFetchSize;
ou seu select pode estar entrando em recursividade???
[/quote]

Não, fiz um teste em uma tabela com apenas 5 registros.

[quote=Inacio Alves][quote=alexborges]Sobre não conseguir compactar depois de um select certamente o select ainda esta na memoria do servidor
seu select traz uma quantidade de dados consideravelmente grande??? pode ser que ele esteja usando uma especie de setFetchSize;
ou seu select pode estar entrando em recursividade???
[/quote]

Não, fiz um teste em uma tabela com apenas 5 registros. [/quote]

as vezes é o servidor do banco…tenta reinstalar

Removi a versão 4.01 e instalei a versão 5.0 mas o problema continuou. Acho que vou ter que esperar uma nova versão ou então utilizar o BACKUP do próprio MySql para ver se dá o mesmo problema.

Valeu.