Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

ProdutoDAO - metodo salva(Produto produto) ...

Olá,

Uma dúvida, se eu executar meu método salva() abaixo, ele ocorre o seguinte erro: "A instrução deve ser executada antes que qualquer resultado seja obtido."

public void salva(Produto produto) throws SQLException {
        String sql = "insert into Produto (nome, descricao) values (?, ?)";

        try (PreparedStatement statement = con.prepareStatement(sql)) {

            statement.setString(1, produto.getNome());
            statement.setString(2, produto.getDescricao());
            statement.execute();

            try (ResultSet rs = statement.getGeneratedKeys()) {
                if (rs.next()) {
                    int id = rs.getInt("id");
                    produto.setId(id);
                }
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
    }

Visto que, se eu retirar o try catch do ResultSet, este erro para de ocorrer ... alguém saberia o por que disto ?

Quando criei a tabela Produto no SQL Server, fiz a seguinte query

Create table Produto (
    id integer identity primary key,
    nome varchar(50) not null,
    descricao varchar(255)
)
4 respostas

Olá Andrew,

Notei que você invocou o "statement.getGeneratedKeys()" após executá-lo, mas esqueceu de usar a versão sobrecarregada de prepareStatement:

PreparedStatement statement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);

que explicitamente indica que as chaves geradas devem ser retornadas.

Certoooo, mas agora ocorre outro erro ...

"O nome de coluna id não é válido."

Isso pode ser porque utilizei id auto increment no sql server ? Outra coisa ... o que seria esse Statement.RETURN_GENERATED_KEYS ???

Opa,

A constante Statement.RETURN_GENERATED_KEYS indica que as chaves geradas na execução do seu statement devem ser retornadas, para que você então possa trabalhar com elas.

Quanto ao seu novo problema, faça o seguinte teste, fazendo favor, obtenha o id utilizando o getString() do resultSet:

String id = resultSet.getString("id");

solução!

substitua o nome literal da coluna pela posição ou seja,

String id = resultSet.getString(1);