Retornando campo autoincremeto

4 respostas
E

Olá!

Suponde que tenho a seguinte tabela:

tblClientes

CodCliente* autoIncremento
Nome Texto(50)
CPF texto(11)

E no Java eu tenho a seguinte classe:

public class Cliente {
  private int codcliente;
  private String nome;
  private String CPF;

  public Cliente() {
    codCliente = 0;
    nome = "";
    CPF = "";
  }

  public salvar() {
    //implementação do método salvar
  }
}

A minha idéia é a seguinte: enquanto a classe ainda não estiver salva o codcliente sempre vai ser zero, ou seja, quando o código for 0 no salvar vou executar um comando insert e quando for diferente de 0 vou executar um update. Mas, para isso, preciso, logo depois de executar o insert, receber o valor do código que foi auto-incrementado na tabela.

Vou tentar ser mais claro.

vou executar o comando insert:
insert into tblClientes values(null, ‘Nome1’, ‘[telefone removido]’);

depois disso ele vai criar um valor X para o CodCliente e é justamente esse cara que tenho que passar para o atributo codcliente imediatamente depois de postado.
Eu pensei em fazer isso selecionando sempre a linha com o maior CodCliente, mas acho que no caso de mais de uma aplicação rodando ao mesmo tempo vai gerar algum tipo de inconsistência.

Tem alguma forma de fazer isso?

4 Respostas

M

Opa,

usa o método pstmt.getGeneratedKeys() do PreparedStatement que retorna um resultset com os identificadores gerados.

ps: retorna vazio caso nenhum seja gerado.

:okok:

K

Voce já tentou usar Generator? Eu acho que controlar o numero da PK via programacao nao eh muito viavel. Eu tenho um cadastro que funciona dessa forma que voce quer. Ele tem um só botao, SALVAR, que aplica INSERT ou UPDATE dependendo do que voce está fazendo na sua tela de cadastro. Faça o seguinte. Teste a viabilidade de se usar o pstmt.getGeneratedKeys() como o marcossouza incidicou, mas (caso voce nao conheça) ao menos leia sobre o generator. No meu caso, foi muito mais viável.

E

Se não me engano Generator só tem no interbase acho que no mySQL não tem. Mas de quaquer forma coloca ai um pequeno exemplo de como seria o código java utilizando generator. Se possível coloque a classe que você falou que desenvolveu. Obrigado.

K

A unica coisa que muda, é que quando voce for inserir no banco, ao invez de passar uma variavel com o codigo, voce passa o nome do generator, GEN_ID(tabela_ID)

E quanto a minha classe, a unica coisa que faço é o seguinte. Eu tenho uma variavel booleana que diz ao botao salvar se ele deve usar o metodo inserir, ou o metodo atualizar. Ou seja, qdo o usuario abre o formulario de cadastro, ele vai preencher os dados e salvar, ou INSERT. A menos que ele abra o formulario em branco, e depois peça pesquisar, caso a pesquisa retorne resultado, entao o salvar passar a ser UPDATE. Entendeu?

Mas pesquise no MySQL, se ele nao tem generators, deve ter algum recurso semelhante.

Criado 19 de maio de 2006
Ultima resposta 23 de mai. de 2006
Respostas 4
Participantes 3