Return Generated Keys mysql java

1 resposta
ricardocomp

Olá pessoal,
eu não estou conseguindo
retornar a chave primaria do meu endereço
será que alguém poderia me dar uma ajuda fazendo o favor?

public int salvarEndereco(Endereco endereco) throws LAFQADaoException {

        PreparedStatement ps = null;
        Connection conn = null;

        if (endereco == null)
            throw new LAFQADaoException("o valor passado não pode ser lido");

        try {

            String sql = "INSERT INTO endereco(rua, numero, bairro, " +
                    "cidade, estado, cep, uf)"
                    + "VALUES(?,?,?,?,?,?,?)";

            conn = this.conn;
            ps = conn.prepareStatement(sql);
            ps.setString(1, endereco.getRua());
            ps.setInt(2, endereco.getNumero());
            ps.setString(3, endereco.getBairro());
            ps.setString(4, endereco.getCidade());
            ps.setString(5, endereco.getEstado());
            ps.setString(6, endereco.getCep());
            ps.setString(7, endereco.getUf());
            ps.executeUpdate();
            //Retorna o id do endereco cadastrado
            //Não sei como retornar a chave primaria???
            //Não dá certo o que fiz???
            return Integer.parseInt(ps.getGeneratedKeys().getString(1);
        }
        catch (Exception sqle) {
            throw new LAFQADaoException("Erro ao inserir dados" + sqle);

        } finally {
            try {
                ConnectionFactory.closeconnection(conn, ps);
            }
            catch (SQLException ex) {
                Logger.getLogger(ProdutorDao.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

[]'s.

1 Resposta

wbdsjunior

o método getGeneratedKeys() retorna todas as chaves geradas e não apenas a última.

um exemplo:

String sql = "INSERT INTO endereco(rua, numero, bairro, " +
    "cidade, estado, cep, uf)"
    + "VALUES(?,?,?,?,?,?,?)";
conn = this.conn;
ps = conn.prepareStatement(sql);
ps.setString(1, endereco.getRua());
ps.setInt(2, endereco.getNumero());
ps.setString(3, endereco.getBairro());
ps.setString(4, endereco.getCidade());
ps.setString(5, endereco.getEstado());
ps.setString(6, endereco.getCep());
ps.setString(7, endereco.getUf());
ps.executeUpdate(); 
ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); // é importante passar o parâmetro Statement.RETURN_GENERATED_KEYS
ResultSet rs = ps.getGeneratedKeys();

if (rs.next()) {
    ResultSetMetaData rsmd = rs.getMetaData();
    int columnCount= rsmd.getColumnCount();

    do {
        for (int i = 1; i <= columnCount; i++) {
            String key = rs.getString(i);
            System.out.println("key " + i + "is " + key);
        }
    }
    while (rs.next();)
} else {
    System.out.println("There are no generated keys.");
}
Criado 21 de setembro de 2009
Ultima resposta 21 de set. de 2009
Respostas 1
Participantes 2