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

Criação das tabelas no MYSQL

Por conveniência, estou utilizando o MYSQL 5.7, e a SQL abaixo não funciona:

CREATE TABLE Produto (id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, nome VARCHAR(255), descricao VARCHAR(255));

Para substituí-la, usei a seguinte:

CREATE TABLE Produto ( id INTEGER NOT NULL auto_increment PRIMARY KEY,    nome VARCHAR(255),    descricao VARCHAR(255));

Porém, o comando

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

do método adiciona da classe "Testa Inserção" me retorna a seguinte mensagem de erro:

Exception in thread "main" java.sql.SQLException: Column 'id' not found.
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:897)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:886)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)
    at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1077)
    at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5192)
    at br.caelum.com.jdbc.TestaInsercao.adiciona(TestaInsercao.java:32)
    at br.caelum.com.jdbc.TestaInsercao.main(TestaInsercao.java:17)

Código da classe "Testa Inserção" COMPLETO:

package br.caelum.com.jdbc;

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

public class TestaInsercao {

    public static void main(String[] args) throws SQLException {
        Connection connection = Database.getConnection();
        String sql = "insert into Produto (nome, descricao) values (?, ?)";
        PreparedStatement statement = connection.prepareStatement(sql, 
                Statement.RETURN_GENERATED_KEYS);
        adiciona("TV LCD", "32''", statement);
        adiciona("Blue Ray", "Full HDMI", statement);
        statement.close();
        connection.close();
    }
    private static void adiciona(String nome, String descricao,
            PreparedStatement statement) throws SQLException {
        statement.setString(1, nome);
        statement.setString(2, descricao);        
        boolean resultado = statement.execute();
        System.out.println(resultado);
        ResultSet resultSet = statement.getGeneratedKeys();
        while (resultSet.next()) {
            String id = resultSet.getString("id");
            System.out.println(id + " gerado");
        }
        resultSet.close();
    }
}

Grato.

3 respostas

Fala aí, Rodrigo! Beleza, cara?

Não tenho certeza quanto ao erro que seria lançado, mas seu ID está definido como integer no banco de dados... Você tentou usar o getInt() do ResultSet, ao invés do getString()? =)

Fábio

Mudei a linha

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

para

int id = resultSet.getInt("id");

e o erro persistiu.

Configuração da minha tabela "Produto"

Column Name     Data Type     PK NN UQ B UN ZF AI G
 id              INT(11)       x  x             x
 nome            VARCHAR(255)
 descricao       VARCHAR(255)
package br.com.caelum.jdbc;

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

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

public class TestaInsercaoDeProduto {

    public static void main(String[] args) throws SQLException {
        Produto mesa = new Produto("Mesa Azul", "mesa com 4 pés");

        try (Connection connection = new ConnectionPool().getConnection()) {
            String sql = "insert into produto (nome, descricao) values (?, ?)";

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

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

                try (ResultSet rs = stmt.getGeneratedKeys()) {
                    rs.next();
                    int id = rs.getInt("id");
                    mesa.setId(id);
                }
            }
        }
    }
}

erro:

Exception in thread "main" java.sql.SQLException: Column 'id' not found.
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:897)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:886)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)
    at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1077)
    at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2572)
    at br.com.caelum.jdbc.TestaInsercaoDeProduto.main(TestaInsercaoDeProduto.java:28)
solução!

Opa! E aí, Rodrigo! Certinho? =)

Desculpe a demora em respondê-lo... Você conseguiu resolver o problema? =)

Fábio