1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Antecessor e posterior de uma linha? Índice seria a melhor opção?

Eu tenho uma GUI que mostra os dados de um cadastro do banco, e nele tem dois botões que tem a opção de antecessor e posterior a partir do codCliente em aberto. Nesta imagem abaixo, por exemplo, consultei o cliente do código 26, se clicar em anterior, vai mostrar os dados do cliente do código 25 e se clicar em próximo o do código 26.

https://www.filepicker.io/api/file/SLmbH1akT4m4YZgljQ8Y

Eu estava antes apenas subtraindo do código "-1" ou "+1" para o proximo, mas esqueci que utilizei um gerador de chave que para diminuir/eliminar a chance de erro,salva seus arquivos também quando desce. Assim o banco "pula" o numero no código do cliente cadastrado, ficando assim:

https://www.filepicker.io/api/file/RogB9VbS3uA0BqsgToss

Com os índices eu poderia numerar em ordem a chave primaria codCliente, "create index indice_cod_clientes on TBCliente(codCliente)"; mas como faço para pegar o índice anterior ou posterior do índice do código selecionado?

OBS: Esse é meu código gerador de chave na DAO:

https://www.filepicker.io/api/file/ttqKFqWYTfOYUXq5bOEE

  • Sei que não é pertinente ao teu problema mas, vc esta gerando tuas PK na mão, no teu método getNewKey(), fazendo Select (MAX) +1? seu sistema não vai ser concorrente ? Não vai haver mais pessoas podendo operar o sistema ao mesmo tempo? Se a resposta for sim, isso pode ocasionar problema. Pense duas pessoas cadastrando elas recebem a mesma PK para cadastrar na tabela.

    AndreBonatti   21 de out de 2013
  • Removi um monte de tags sem sentido (como JEE, sendo que seu projeto é Swing, ou imagens, já que a dúvida não tem nada a ver com imagens). E inclui a tag Swing.

    ViniGodoy   21 de out de 2013
  • Outra observação. Deixe a geração dos números da chave com o banco de dados. Atualizar manualmente, como você fez, funciona numa aplicação de um usuário só, mas dá problema quando vários usuários estão usando o banco ao mesmo tempo. Existirá a chance de dois usuários diferentes fazerem o SELECT ao mesmo tempo e, por consequencia, tentarem gravar o mesmo código no banco.

    ViniGodoy   21 de out de 2013
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags java banco-de-dados sql insert swing ou faça a sua própria pergunta.