Estou usando SQLSrver 2000 (versão 8.00.194) com o driver da Microsoft (versão 2.2.0029).
Na minha aplicação estou paginação. Isso significa que dependendo da página escolhida, quero que o cursor avance um certo número de posições até chegar a posição escolhida e daí recolho os dados até conseguir o número de dados a serem exbidos. A princício usei o método ResultSet.absolute(int). Entretanto quando faço isso aparece a seguinte exceção:
O curioso é que na documentação que acompanha o dirver, está escrito que ResultSet.absolute(int) é suportado. :shock: Antes que alguém pergunte, a mesma exceção acontece quando tento usar o driver jTDS.
Como conseqüência tive que usar o seguinte método para avançar nos registros do SQL Server:
for(int i = 0; (i < pos) && rs.next(); i ++) {}
O problema é que dependendo da página que quero visualizar, o tempo que devo aguardar até chegar ao registro desejado pode ser considerável.
:?: Alguém tem alguma idéia de como contornar isso?
Onde acho exemplo disso? Procurei no JavaAlmanac e não tinha nada (aliás não tem nada de javax.sql.*). Na API do javax.sql não aparece nada sobre CachedRowSet, apenas RowSet. Como o obtenho? Tem certeza que isso vale para a API 1.4.x?
Meu pesames Rafael. Usar o driver jdbc do sqlserver eh horrivel
Bem a sua situacao eh a seguinte. o driver jdbc tem na verdade doiis metodos de fazer consulta, selecionados pelo parametro de conexao chamado SelectMethod. ele pode ser direct ou cursor. Basta voce colocar na criacao da conexao o SelectMethod=direct.
Infelizmente o modo de posicionamento absoluto do resultset nao esta disponivel nos dois modos. Nao me recordo ao certo qual permite essa funcionalidade (tenho a impressao que eh o direct). Soh ha um porem do modo direct, ele copia toda o resultado para o lado do cliente (se der um select * from usuario e tiver 10000 registros, vai papar toda a ram do cliente ) . Alem disso nao eh possivel fazer uso de transacao do modo direct.
Ja com o modo cursor nao tem esses problemas, o cursor fica no servidor e vem chunks (configuraveis) de 20 registros. Nao ha problemas com transacoes. Porem parece que o posicionamento absoluto nao eh possivel. Bem, quem sabe um dia M$ ajeita o driver.
Pelo que entendi, tanto a página da Sun, quanto o Value List Handler (a sugestão do crazybob), implicam em pegar todos as linhas da query, gerar uma list dos objetos e depois guardá-los na memória. Isso não é interessante para mim pois dependendo das consultas feitas poderei acumular listas demais e sobrecarregar a memória.
Grato,
louds
Nesse caso você poder usar Page-by-Page Iterator ou Lazy Loading
TedLoprao
Realmente, eu estou usando Lazy Loading e ficou muito bom!!!