Chave primaria mysql

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

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…

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

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.

obrigado galera

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:

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.

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!

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?

[quote=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?[/quote]

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: