PEGAR ID Corrente

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();
        }

    }