Pegar id de cliente que acabou de ser inserido

Boa noite!!

Gostaria de uma ajuda… Ao salvar meu cadastro no banco gostaria de receber o id que esse cadastro foi gerado pois o id é autoincrement, segue método Salvar class DAO:

public void salvar(Cliente cliente) throws SQLException {
    int id_gerado = 0;
    Connection con = Conexao.Conexao();
    String sql;
    PreparedStatement pst = null;
    int idObjeto = 0;

    try {
        sql = "INSERT INTO cliente VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
        pst = con.prepareStatement(sql);
        pst.setInt(1, 0);
        pst.setString(2, cliente.getNome());
        pst.setString(3, cliente.getCpf());
        pst.setString(4, cliente.getRg());
        pst.setString(5, cliente.getRua());
        pst.setString(6, cliente.getNumero());
        pst.setString(7, cliente.getComplemento());
        pst.setString(8, cliente.getBairro());
        pst.setString(9, cliente.getCidade());
        pst.setString(10, cliente.getUf());
        pst.setString(11, cliente.getData_nascimento());
        pst.setString(12, cliente.getCep());
        pst.setString(13, cliente.getEmail());
        pst.setString(14, cliente.getNacionalidade());
        pst.setString(15, cliente.getNaturalidade());
        pst.setString(16, cliente.getTelefone());
        pst.setString(17, cliente.getCelular());
        pst.setString(18, cliente.getNome_pai());
        pst.setString(19, cliente.getNome_mae());
        pst.setString(20, cliente.getProfissao());
        pst.setFloat(21, cliente.getRenda());
        pst.setString(22, cliente.getNome_trabalho());
        pst.setString(23, cliente.getEnd_trabalho());
        pst.setString(24, cliente.getEstado_civil());
        pst.setString(25, cliente.getNome_conjude());
        pst.setString(26, cliente.getCpf_conjude());
        pst.setString(27, cliente.getRg_conjude());
        pst.setString(28, cliente.getTelefone_conjude());
        pst.setString(29, cliente.getCelular_conjude());
        pst.setString(30, cliente.getNome_pai_conjude());
        pst.setString(31, cliente.getNome_mae_conjude());
        pst.setString(32, cliente.getBanco());
        pst.setString(33, cliente.getTipo_conta());
        pst.setString(34, cliente.getAgencia());
        pst.setString(35, cliente.getConta_banco());
        pst.setString(36, cliente.getCidade_banco());
        pst.setString(37, cliente.getObservacao());
        pst.setString(38, cliente.getAquisicao());
        pst.execute();

        JOptionPane.showMessageDialog(null, "Salvo com Sucesso!!  Cliente ID: "+id_gerado);

    } catch (HeadlessException | SQLException ex) {
        JOptionPane.showMessageDialog(null, "Erro ao Salvar!!" + ex);
    } finally {
        Conexao.closeConnection(con, pst);
    }

}

Na hora de retornar o PreparedStatement da conexão, você pode passar por parâmetro não só a String SQL mas também um parâmetro que retorna o ID Auto Generated.
pst = connection.prepareStatement(sql, com.mysql.jdbc.PreparedStatement.RETURN_GENERATED_KEYS);
E após executar o PreparedStatement você pode retornar o novo ID gerado pelo execute:
// Executa a instrução SQL
pst.execute();
// Recebe o ID auto-gerado
ResultSet rs = pst.getGeneratedKeys();

2 curtidas