Chave primaria mysql

9 respostas
D

Tenho um banco de dados mysql com uma tabela chamada funcionario que tem uma chave primaria chamada cepf.Gostaria antes de inserir dados nesta tabela veirificar se a dados igual .

JTextField = t_1;
JTextField = t_2;
JTextField = t_3;
stm.executeUpdate("INSERT INTO funcionario(cepf,nome,cargo)Values('"+ t_1.getText()+"','"+t_2.getText()+"','"+t_3.getText()+"')");

if (t_1==cepf )como que eu verifico isto ?depois disto exibir um menssagem falando que ja existe funcionario com este cpf
por favor me ajude

9 Respostas

Kassiane_Pretti

Vc pode recuperar todos os cpfs armazenados colocando-os dentro de um vetor ou lista.

Após isso vc compara o cpf digitado com os existentes… Um if/else resolve seu problema neste caso…

Espero ter ajudado…

crpablo

Se cpf é sua PK ele já vai reclamar qnd tentar inserir outra igual!

Jeferson_Flamini

se vc tem cepf como PK no Mysql ele te gera um SQLException de chave duplicada

java.sql.SQLException: Duplicate key or integrity constraint

Se não, vc pode executar um SELECT primeiro e ver quantos registros existem.

Geralmente prefiro a primeira opção.

D

obrigado galera

C

Opa,

você pode definir todos os teus campos ( cepf,nome,cargo ) como PK, desta maneira no momento do INSERT o MYSQL verificará se não existem campos iguais. Assim nenhum teste prévio será necessário, pois o mysql se encarrega de tudo. Você preciará somente tratar a exception lançada pelo java.

Claro… tudo dependerá da tua necessidade! :lol:

T

ao inves de um if/else nao seria melhor um foreach? isso criando um arraylist…

mesmo que tentasse inserir um dado duplicado o sql daria erro por já existir, é legal vc tratar isso na sua aplicação, caso nao consiga inserir por ja existir esse registro vc desvia o código, tipo, pedindo pra pessoa digitar outro cepf, e exibindo essa mensagem de duplicação.

C

Lembrei de outra coisa…

o comando REPLACE do mysql também pode te ajudar:

http://dev.mysql.com/doc/refman/4.1/pt/replace.html

o que não é muito legal é ficar fazendo SELECT para buscar dados somente para compará-los e depois INSERT,
isso gera acesso desnecessário ao teu banco de dados… temos que otimizar ao máximo o acesso ao BD, assim
nossos aplicativos ficarão mais rápidos. Digo isso, pois já senti na pele o que é um aplicativo com Querys não otimizadas e acessos desnecessários. A principio parece que não dá nada… mais depois :thumbdown:

boa sorte!

T

do link acima:

“REPLACE funciona exatamente como o INSERT, exceto que se um registro antigo na tabela tem o mesmo valor que um novo registro em um índice UNIQUE ou PRIMARY KEY, o registro antigo é deletado antes que o novo registro seja inserido…”

foi isso q eu entendi?
usando o REPLACE o registro antigo é apagado e inserido o novo correto? sendo assim digamos que tenhamos uma pessoa com certo CPF (seu próprio cpf), e tentemos inserir outra pessoa com o mesmo cpf (erro de digitação), ele apaga a pessoa antiga(certa) e insere a nova (errada)? isso nao gera erro de informação?

C

Thiago Domingues:
do link acima:

“REPLACE funciona exatamente como o INSERT, exceto que se um registro antigo na tabela tem o mesmo valor que um novo registro em um índice UNIQUE ou PRIMARY KEY, o registro antigo é deletado antes que o novo registro seja inserido…”

foi isso q eu entendi?
usando o REPLACE o registro antigo é apagado e inserido o novo correto? sendo assim digamos que tenhamos uma pessoa com certo CPF (seu próprio cpf), e tentemos inserir outra pessoa com o mesmo cpf (erro de digitação), ele apaga a pessoa antiga(certa) e insere a nova (errada)? isso nao gera erro de informação?

Você não entendeu errado…o REPLACE é perigoso mesmo!
Mas para não ter nenhum problema com o REPLACE utilize da seguinte maneira:

1- Quando vc esta cadastrando um usuário novo faça com INSERT dessa maneira se houver a tentativa de um cadastro duplicado uma exception será gerada então vc poderá tratá-la.

2- Quando for alterar um cadastro, daí sim utilize REPLACE (em vez do UPDATE), pois naturalmente você vai liberar todos os campos para serem alterarados, exceto o campo CPF (PK), pois o CPF é único e não tem porque alterar (ninguém por meios legais troca o número do cpf). Desta maneira ninguém vai detonar o BD por erro de digitação.

É Claro que existem muitas outras práticas, as tuas necessidades dirão qual é a melhor! :slight_smile:

Criado 25 de janeiro de 2008
Ultima resposta 26 de jan. de 2008
Respostas 9
Participantes 6