Pessoal como é que eu faço pra no meu metodo inserir eu pegar o ID que acabou de ser inserido em uma tabela, para que eu possa inseri-la em outra tabela como FK?
Não sei se deu pra entender. Mas espero que sim, se nao esplico melhor!
Pessoal como é que eu faço pra no meu metodo inserir eu pegar o ID que acabou de ser inserido em uma tabela, para que eu possa inseri-la em outra tabela como FK?
Não sei se deu pra entender. Mas espero que sim, se nao esplico melhor!
[quote=ttelsen]Pessoal como é que eu faço pra no meu metodo inserir eu pegar o ID que acabou de ser inserido em uma tabela, para que eu possa inseri-la em outra tabela como FK?
Não sei se deu pra entender. Mas espero que sim, se nao esplico melhor![/quote]
Há várias formas de se fazer isso e a maioria delas costuma não ser a ideal.
Geralmente você deve deixar a responsabilidade de ler o id inserido para quem gerou o id inserido.
Como o id está sendo gerado?
[quote=AbelBueno][quote=ttelsen]Pessoal como é que eu faço pra no meu metodo inserir eu pegar o ID que acabou de ser inserido em uma tabela, para que eu possa inseri-la em outra tabela como FK?
Não sei se deu pra entender. Mas espero que sim, se nao esplico melhor![/quote]
Há várias formas de se fazer isso e a maioria delas costuma não ser a ideal.
Geralmente você deve deixar a responsabilidade de ler o id inserido para quem gerou o id inserido.
Como o id está sendo gerado?
[/quote]
Bem, está sendo gerado automaticamente é AUTOINCREMENT.
Ou seja, o banco está gerando o ID, então deixe para o banco a responsabilidade para te fornecer o id que ele gerou.
No caso do Mysql (acho que é seu caso) parece existir a função mysql_insert_id () que retorna esse valor.
Executando um select nessa função deve retornar o valor gerado.
Como eu disse, o próprio JDBC tem facilitadores para este tipo de situação.
Usando um PreparedStatement teria um código como esse:
String sql = ""; // aqui você monta seu insert
PreparedStatement ps; // = ....
ps.execute(sql, PreparedStatement.RETURN_GENERATED_KEYS);
ps.getGeneratedKeys(); //isso retorna um resultset, você lê para obter a chave gerada
Verifique se seu driver jdbc já implementa corretamente esse recurso.
Ou seja, o banco está gerando o ID, então deixe para o banco a responsabilidade para te fornecer o id que ele gerou.
No caso do Mysql (acho que é seu caso) parece existir a função mysql_insert_id () que retorna esse valor.
Executando um select nessa função deve retornar o valor gerado.
Como eu disse, o próprio JDBC tem facilitadores para este tipo de situação.
Usando um PreparedStatement teria um código como esse:
String sql = ""; // aqui você monta seu insert
PreparedStatement ps; // = ....
ps.execute(sql, PreparedStatement.RETURN_GENERATED_KEYS);
ps.getGeneratedKeys(); //isso retorna um resultset, você lê para obter a chave gerada
Verifique se seu driver jdbc já implementa corretamente esse recurso.[/quote]
Pelo SELECT LAST_INSERT_ID(); ele me retorna o ID 4,mas ja tenho outros mas a frente.
Pelo PreparedStatement.RETURN_GENERATED_KEYS dando um println so pra ver o retorno ele me da “com.mysql.jdbc.JDBC4ResultSet@7b277da2”
É isso mesmo?
[quote]
Pelo PreparedStatement.RETURN_GENERATED_KEYS dando um println so pra ver o retorno ele me da “com.mysql.jdbc.JDBC4ResultSet@7b277da2”
É isso mesmo?[/quote]
Ele te mostro isso porque o metodo lhe retornou um objeto do tipo ResultSet, voce tera que ler o resultSet para pegar o valor
Okay ja estou tendo o retorno. mas agora travei como é que faço pra fazer o outro insert?
uso o mesmo preparedStatement? ou tenho que criar outro?
Meu método está assim:
public void inserirFornecedor(Fornecedor f) {
String sql = "insert into fornecedor (nome_fornecedor, telefone_fornecedor, cnpj_fornecedor) values (?,?,?)";
try {
Conexao c = new Conexao();
conn = c.getConnection();
if (conn == null) {
JOptionPane.showMessageDialog(null, "Erro ao conectar Banco de Dados");
} else {
ps = conn.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS);
ps.setString(1, f.getNomeFornecedor());
ps.setString(2, f.getTelefoneFornecedor());
ps.setString(3, f.getCnpjFornecedor());
ps.execute();
ps.getGeneratedKeys();
JOptionPane.showMessageDialog(null, "Dados Cadastrados");
}
} catch (Exception e) {
e.printStackTrace();
}
}