Nao me considerem um cara chato, mas vivendo e aprendendo…
Agradeço desde já a compreensao de todos, vcs tem me ensinado muitas coisas… esse fórum realmente é muito bom (orque já tentei outros e nao gostei)
Quando eu perguntei sobre o titulo acima, me responderam…
De fato não é possível ordenar um ResultSet e, para mim, não faz nenhum sentido este tipo de operação, já que uma representação de uma tabela não precisa de ordenação (coisas que fogem de sua responsabilidade). Sugestões:
mapear o ResultSet para objetos que implemente a interface java.lang.Comparable e jogá-los em um List
criar algum widget maluco que faça a ordenação de informações, como os DataSets do .NET fazem (aliás, me pergunto até hoje porque diabos a porcaria do Swing não tem um componentezinho destes pronto para usar).
Nossa, que raios de aplicação é esta onde vc tem que ordenar um ResultSet? Não me convenceu não…
Que tal se usar o ResultSet apenas para trazer os dados, e armazenasse isso em uma List… e como disse nosso amigo Volnei Latino, usar o método sort para fazer a ordenação que quiser
O problema é o seguinte, galera: vcs ja tentaram trazer pra List ou pra qualquer outro objeto 400.000 REGISTROS com 25 COLUNAS??? é f…
estoura tudo…
Eu so perguntei isso porque no Delphi eu posso ordenar os ResultSets…
Depois de feita a listagem, o cara pode ordenar pelo campo que quiser e filtrar tanto por campo qto por registro…
Para que precisa ficar com 400.000 registros em memória? O usuário vai visualizar eles todos ao mesmo tempo?
Sua dificuldade não reside na ordenação do ResultSet, mas sim em como funciona uma conexão com um banco de dados e o que é um conjunto de registros vindo do mesmo.
Se o Delphi faz um montão de coisas, e deixa tudo prontinho para usar, bastando arrastar alguns ícones, ok. Mas se você precisa fazer um pouco mais do que isso, é bom entender o que rola por trás daquela interface que faz todo mundo desenvolver tão rápido.
Analise o seu problema novamente. Você precisa reordenar o conjunto de dados e criar novos filtros, certo?
Onde os dados residem após o primeiro select? Numa JTable? Ou numa página HTML? Ou na telinha de um Palm?
Descreva melhor o ambiente, e talvez possamos te ajudar!
Lembre-se: há sempre muitas maneiras de resolver o mesmo problema. Sem um pouco de curiosidade tenho certeza que vai desanimar bem rápido de Java.
public static void main(String[] args) {
ArrayList a = new ArrayList();
for (int i=0; i<400000; i++)
a.add("Item"+i);
for (Iterator i = a.iterator(); i.hasNext();)
System.out.println(i.next());
}
}[/code]
Eu coloco 400.000 objetos em uma List sem problemas, e olha que não sou nenhum super-herói.
Um servidor que tem que aguentar qualquer coisa deste porte (sim, iterar um ResultSet com 400000 rows é coisa pra dedéu) estará no mínimo preparado para aguentar isto. Se não estiver, não é função dele.
Independente de quantidade de memória (não só fisica quanto de configuracao do teu SC), onde quero chegar é que um servidor aguentará isso tão fácil quanto a minha máquina carrega estas 40000 linhas na List.
Realmente, se o teu servidor for um P100 isso vai estourar.
Agora com um puta dum servidor rodando isso (e rodando corretamente, soh instalar tomcat (blergh) e jdk nao rola), nao creio que haverá problemas.
Voltando ao escopo da questão. Não existe uma situação que me entre na cabeção que ResultSets devem ser ordenados em tempo de execução e não criação.
E outra, como vc mesmo disse, será que tem que ter 400.000 em memoria? pq nao trabalhar com LIMITS e outros recursos?
[quote=tyrael]Eu so perguntei isso porque no Delphi eu posso ordenar os ResultSets…
Depois de feita a listagem, o cara pode ordenar pelo campo que quiser e filtrar tanto por campo qto por registro…[/quote]
No Delphi, quando você manda ordenar um “ResultSet”, ele:
:arrow: busca no banco novamente ordenando pela tal coluna ou então,
:arrow: ordena os dados na memória, pois já buscou os dados anteriormente
Qualquer uma destas 2 saídas foram sugeridas, cabe a você decidir o que será menos custoso para você.