[JDBC/ODBC] Como inserir registro na próxima linha disponível no BD?

6 respostas
alomurilo

Bom dia. Não sei se aqui é o lugar certo pra postar, mas vamos lá.

Criei um sistema de gerenciamento de multa para um projeto da faculdade com banco em Access, já fiz a ligação com o banco e testei. Tudo funcionando perfeitamente.

A única dificuldade que estou encontrando é na hora de inserir dados no banco. O Access automaticamente cria um código de identificação para cada registro, como eu faço para, na minha string de execução do aplicativo, pegar esse código?

Não sei se consegui ser claro. Minha string de inserção é essa:

BD.stm.execute("INSERT INTO titular VALUES(3,'" + txtnome.getText() + "', " + txtrg.getText() + ", " + txtcpf.getText() + ", " + txtcnh.getText() + ", 0);");

Fiz isso só como um teste. 3 é o código que eu gostaria que o programa pegasse automáticamente do Access. Como faço?

Obrigado.

6 Respostas

zoren

usa o método getGeneratedKeys do Statement,

mas depende da implementação do driver do jdbc, não sei se você vai ter isso disponível no OBDC do windows

Em algumas implementações de drivers não é preciso fazer nada, em outras vc tem que passar que você quer recuperar as chaves no método createStatemento do objeto conection

asandrob

Tens certeza que é necessário informar esse número? Pois se é auto-incremento o banco que gerencia esse número!!!
Experimenta não informar e vê o comportamento do banco.

alomurilo

zoren:
usa o método getGeneratedKeys do Statement,

mas depende da implementação do driver do jdbc, não sei se você vai ter isso disponível no OBDC do windows

Em algumas implementações de drivers não é preciso fazer nada, em outras vc tem que passar que você quer recuperar as chaves no método createStatemento do objeto conection

Acho que o caminho é esse getGeneretedKeys mesmo, mas pode me dar algum exemplo de como implemento isso no código?

Obrigado.

asandrob:
Tens certeza que é necessário informar esse número? Pois se é auto-incremento o banco que gerencia esse número!!!
Experimenta não informar e vê o comportamento do banco.

Impossível, pois o campo é a PK da tabela.

zoren

Aqui tem um exemplo no guj

http://www.guj.com.br/posts/list/100487.java

Exemplo no Java2s:

http://www.java2s.com/Code/Java/Database-SQL-JDBC/DemoGetGeneratedKeysMySQL.htm

Não lembro onde está o código de qdo eu precisei implementar, mas é bem simples.

alomurilo

Consegui resolver, em partes, deixando o campo em branco mesmo. Obrigado, asandrob e zoren pela ajuda.

O que eu gostaria agora é de, quando o usuário abrir a janela de cadastro de novo titular, o programa preencha automaticamente o campo id, que é gerando pelo banco. Este campo está como setEnabled(false), então o usuário não poderá fazer alterações.

Meu código está assim:

if (i == JOptionPane.OK_OPTION){ BD.stm.executeUpdate("INSERT INTO titular (rg, nome_titular,cpf,cnh,pontos) VALUES(" + txtrg.getText() + ", " + "'" + txtnome.getText() + "', " + txtcpf.getText() + ", " + txtcnh.getText() + ", 0);"); JOptionPane.showMessageDialog(null, "Informações salvas."); }

Vi por uns tutoriais na internet que o pessoal usa ResultSet e PreparedStatement. Vou precisar desses métodos pra fazer o que quero?

zoren

Antes de salvar não é possível, vc só tem acesso ao ID após ele ser gerado no banco no momento do insert.

Criado 13 de outubro de 2010
Ultima resposta 14 de out. de 2010
Respostas 6
Participantes 3