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

Buscando id com getGeneratedKeys()

Ola pessoal, tenho um problema que me deixa intrigado, estou fazendo um insert no banco usandojdbc com mysql, porém na hora de buscar a coluna id com o ResultSet , rs.getInt("id") exatamente nesta linha o compilador dispara uma exceção, dizendo que a coluna não existe, estou pilhado pq sei que a coluna existe no banco e está como int vejam o código abaixo por favor.

Estou na luta mas se por acaso alguém de vocês conseguir resolver ficarei muito feliz.

Suspeito de bug no eclipse pois esse método la classe é sobrecarregado com duas informações a primeira é a StringColum e a segunda é o IndexColum qd uso a IndexColum ou seja rs.getInt(1) Sistema funciona, quando uso o StringColum ou seja rs.getInt("id") é onde dá o pau.

package br.com.alura.jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import br.com.alura.jdbc.modelo.Produto;

public class TestaInsercaoDeProdutoVERCOLUNARESULTSET {

    public static void main(String[] args) throws SQLException {

        Produto mesa = new Produto("Mesa Azul", "Mesa com 4 pés");

        try (Connection connection = Database.getConnection()) {

            String sql = "INSERT INTO produto (nome, descricao) VALUES (? , ?)";

            try (PreparedStatement statemet = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {

                statemet.setString(1, mesa.getNome());
                statemet.setString(2, mesa.getDescricao());
                statemet.execute();

                try (ResultSet rs = statemet.getGeneratedKeys()) {
                    if (rs.next()) {
                        int id = rs.getInt("id");
                        mesa.setId(id);
                        System.out.println(mesa);
                    }
                }

            }

        }

    }

}
Exception in thread "main" java.sql.SQLException: Column 'id' not found.
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
    at com.mysql.cj.jdbc.result.ResultSetImpl.findColumn(ResultSetImpl.java:580)
    at com.mysql.cj.jdbc.result.ResultSetImpl.getInt(ResultSetImpl.java:915)
    at br.com.alura.jdbc.TestaInsercaoDeProdutoVERCOLUNARESULTSET.main(TestaInsercaoDeProdutoVERCOLUNARESULTSET.java:29)
2 respostas
solução!

Opa, seu código realmente parece correto...

Se você trocar int id = rs.getInt("id"); por int id = rs.getInt(1);

Funciona? Aí depois podemos tentar descobrir pq não é o id que está vindo... outra coisa que você fazer é usar o getResultSeMetadata e descobrir qual coluna está vindo...

Obrigado Alberto resolveu o problema trocando int id = rs.getInt("id"); por int id = rs.getInt(1);