Olá desenvolvedores, bom, sabemos que o ID, ou seja, o identificador único de cada registro em um banco de dados é sequencial e gerado de modo automático. Mas veja aqui em “BANCO DE DADOS: INSERT NO SISTEMA”, nós o estamos “setando” manualmente. Significa ter que ficar consultando a base de dados para saber em que posição a próximo objeto será inserido. Não é eficaz, e com certeza é contraproducente, vamos melhorar essa codificação.
Se tentarmos inserir um registro com uma chave já existente receberemos uma mensagem de erro semelhante a esta “org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint “user_pk” Detalhe: Key (id)=(6) already exists”. Esta mensagem informa que estamos tentando duplicar uma chave já existente e isso é uma violação. Para que esta violação de restrição não se repita iremos criar uma sequência automática no banco de dados.
CRIANDO UMA SEQUÊNCIA AUTOMÁTICA
Então, vamos lá, abra o SGBD – Sistema Gerenciador de Banco de Dados PgAdmin. Certifique-se de ter selecionado a base de dados “posjava” e no QUERY Editor implementaremos uma instrução para criar uma sequência, ou seja, para gerar automaticamente valores de chave primária.
Neste sentido determinaremos que os valores serão incrementados de um em um e igualmente este é também o valor mínimo. O valor máximo é o determinado por default no PstgreSQL 9223372036854775807. E como nosso banco já tem 6 registros inseridos, começaremos a partir do 7. Após escrever o código abaixo, lembre-se de atualizar a tabela pressionando a tecla de função F5.
CREATE SEQUENCE usersequence
increment 1
minvalue 1
maxvalue 9223372036854775807
start 7;
IMPORTANTE: Se você não tem certeza de quantos registros há em sua tabela, utilize o comando “SELECT * FROM userposjava”, para exibi-la.
O próximo passo será fazer a tabela usar esta sequência que acabamos de criar. Para fazermos isso escreveremos uma instrução que informará que iremos proceder com uma alteração na tabela “userposjava”, onde na coluna do id, iremos determinar como padrão a sequência criada “usersequence”. Veja abaixo na prática, como ficará essa linha de código.
alter table userposjava ALTER column id set default nextval (‘usersequence’::regclass);
Selecione a linha de código e atualize o banco com a tecla de função F5. Lembre-se que se a atualização for realizada com sucesso, será exibida uma mensagem como a mostrada abaixo.
Pronto. Agora não será mais necessário informar o id no sistema, pois ele será “setado” de forma automática. Dessa forma, poderemos na classe de Teste apagar a linha de código “userposjava.setId(6L);”. Procederemos do mesmo modo no método salvar da classe DAO, isto é, iremos apagar todas as referências ao ID. Atente-se para a correção das posições após apagar o “insert.setString (1, userposjava.getID())”.
EM POUCAS PALAVRAS
Agora é só ir atualizando o seu sistema selecionando a classe de Teste clicando com o botão direito sobre ela, e escolhendo Run As >> JUnit Test. No banco de dados atualize com F5 para ver o resultado. Eu fico por aqui e nós nos vemos no próximo tutorial.