Setar List?

Gente to pensando em como resolver um problema de performance aqui!

O que vocês acham, eu tenho uma lista que esta rodando na aplicação e a cada vez q eu der um “next()” ou “previous()” o sistema puxa um List novo do banco e seta em cima do que esta rodando?

PS.: tenho q manter o sistema sempre atualizado, pois apesar de ser desktop é multi-usuário!

acredito… criando uma thread para verificar as alterações no banco e populando uma lista com acesso sincronizado pode poupar umpouco o client-side…
você esta usando algum framework ORM?

Estude o Glazed Lists, no site, se não me engano, há um exemplo de um modo otimizado de você mostrar sempre o conteúdo do banco do jeito que você está querendo.

Como estou sem acesso ao site, não consigo lhe indicar a URL exata dese exemplo.

http://publicobjects.com/glazedlists/

[quote=rdgms]acredito… criando uma thread para verificar as alterações no banco e populando uma lista com acesso sincronizado pode poupar umpouco o client-side…
você esta usando algum framework ORM?[/quote]

Bah amigo depois da “thread” eu não entendi mais nada do que você falou :?

Não tenho muita experiencia ainda! Estou usando NetBeans 6.8 + PostGree 3.7.3!

Você pode me dar um exemplo de como fazer essa thread sincronizada? ou me indicar algum site?
vlw :wink:

[quote=entanglement]Estude o Glazed Lists, no site, se não me engano, há um exemplo de um modo otimizado de você mostrar sempre o conteúdo do banco do jeito que você está querendo.

Como estou sem acesso ao site, não consigo lhe indicar a URL exata dese exemplo.

http://publicobjects.com/glazedlists/[/quote]

Vou procurar a respeito, vlw pela dica! :wink:

[quote=guisantogui]Gente to pensando em como resolver um problema de performance aqui!

O que vocês acham, eu tenho uma lista que esta rodando na aplicação e a cada vez q eu der um “next()” ou “previous()” o sistema puxa um List novo do banco e seta em cima do que esta rodando?

PS.: tenho q manter o sistema sempre atualizado, pois apesar de ser desktop é multi-usuário![/quote]

Mas com esse next() ou previous() mostras apenas um registo? Então porque ir buscar todos e não apenas o necessário?

Ai q eh o ponto, como eu vou saber ql eh o “proximo” ? Por isso eu me baseio pelo indice da list

Cara… fala oque você esta fazendo por que ai vamos poder ajudar melhor…
no caso para saber o proximo registro um chave sequencial… poderia ajudar…

Tipo essa parte da aplicação eu tenho q buscar os dados de um banco de dados, mas como o sistema vai ser usado silmultaneamente em varios computadores algum registro pode ser mudado em uma maquina e na outra quando o usuário for pegar o dado vai ter que estar atualizado!

Se sabes o actual, facilmente podes achar o “próximo” ou o “anterior” sem teres de andar sempre a puxar toda a lista, não?

Sim, mas acho que ai esta a chave do problema como eu vou saber em qual posição eu ando na minha aplicação? já q serão navegações distintas entre os vários computadores!

:confused:
vlw

Não precisas de te preocupar com as navegações distintas nos vários computadores. Apenas tens de garantir que, um computador está num determinado registo, e queres o próximo ou o anterior. Se essa lista é obtida através de um SQL, facilmente se alterar esse SQL para dar o próximo ou o anterior com base no actual.

Sim, mas mesmo assim eu ia ter que puxar um list inteiro a cada ida para frente ou para traz! D:

Pelo que entendi, o cliente 1 estará vizualizando o registro 1, ou seja, sua aplicação não precisa de uma lista.

Você tem uma lista com, sei lá, 100 objetos, que você ‘pegou’ do banco de dados.

Gerar essa lista com 100 registros só seria necessário se você fosse mostrar tudo isso na tela, ou seja, mostrar numa JTable esses 100 registros.

Se você tem uma JTable mostrando de 10 em 10 registros, o seu botão next, apenas tem que mudar o valor do setoff e em seguida atualizar a JTable (vai de novo no banco, invés de pegar do 0 ao 10, pegue do 10 ao 20, volta e joga na tabela.).

Fim. :slight_smile:

Se der pra postar o porque dessa aplicação, pra que ela vai servir e talz, vai ajudar muiiito. :slight_smile:

Att.

Não, apenas puxar o que precisas.

Imagina que a tua lista é assim:

SELECT * FROM lista ORDER BY id

Se estás no registo 20 tens o próximo:

SELECT FIRST 1 * FROM lista where id > 20 ORDER BY id

e o anterior:

SELECT FIRST 1 * FROM lista where id < 20 ORDER BY id desc

Deu para perceber?

Nota que o FIRST 1 devolve o primeiro registo do SQL executado e a sua sintaxe varia consoante a DB.

Não entendi essa sua Query, acho que a grande questão não é quem é o próximo ou anterior e sim qual é o registro atual?

vlw pela ajuda pessoal!

O actual é o mais fácil, é o que o utilizador está vendo, não? Tu sabes qual é que o utilizador está vendo…

No postgree eu encontrei os comandos LIMIT e OFFSET, mas como eu vou fazer para ele ir para traz, já que o OFFSET indica para pegar o próximo?? certo?

Era mais facil se colocasses o SQL que executas agora para obter a lista…

to fazendo assim

"SELECT fc.descricao, fc.cheque, fc.rotativo, fc.tipo_conta, fc.dt_ult_fechamento, fc.dt_encerramento, fc.soma_saldo, fc.utilizado_rotativo, fc.cod_fnbanco, p.nome, fc.limite FROM fn_conta AS fc INNER JOIN pessoas AS p ON p.codigo = fc.cod_pessoa LIMIT 1 OFFSET " + posAtual

posAtual sendo um atributo de classe que incrementa quando vai next() e decrement quando vai prev()