4
respostas

resultset.getInt(

/* Estou usando o MySQL para fazer os exercícios, pois tenho que aprender MySQL também. Mas quando uso  id = resultset.getInt("id"); esta retornado erro, sendo que a tabela tem o com campo id. 

No exercicio que postei (1.3 Inserindo Dados), uso o mesmo comando (resultset.getInt("id")) e funciona tudo OK. Aqui só funciona quando envia o Indice resultset.getInt(1), mas não mudei e nem alterei a tabela de produtos.

mysql> show columns from produtos;
| Field           | Type                    | Null | Key | Default | Extra                       |
| id                  | int(11)                | NO  | PRI  | NULL    | auto_increment |
| nome          | varchar(60)    | YES  |           | NULL    |                                     |
| descricao | varchar(150) | YES  |           | NULL    |                                     |
3 rows in set (0.00 sec)

*/ 

/* Retorno do ERRO NO Console
Connection On
Exception in thread "main" java.sql.SQLException: Column 'id' not found.
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
    at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1144)
    at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2813)
    at br.com.alura.jdbc.TestaInsercao.main(TestaInsercao.java:25)
*/


package br.com.alura.jdbc;

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

public class TestaInsercao {

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

        Connection con = Database.getConnection();

        Statement statement = con.createStatement();
        boolean resultado = statement.execute("insert into Produtos (nome, descricao) values('Notebook', 'Notebook "
                + "é bom mas eu prefiro uma gforce')"
                ,Statement.RETURN_GENERATED_KEYS
                );


        Integer id;
        ResultSet resultset = statement.getGeneratedKeys();    

        while(resultset.next()) {
            id = resultset.getInt("id");
            System.out.println("O id gerado foi " + id);
        }

        resultset.close();
        statement.close();
        con.close();        

    }

}
4 respostas

Mude a linha

id = resultset.getInt("id");

Para

id = resultset.getInt(1);

Exato Isso funciona, mas eu fiz isso também(esta na segunda linha, eu expliquei justamente isso que vc acabou de escrever).Eu queria saber porque não esta funcionando agora, quando usa o no Statement.RETURN_GENERATED_KEYS. Se for isso e qual o motivo de não funcionar ?

Veja o que está sendo retornado para verificar o que está gerando a mensagem de erro "Column 'id' not found".

System.out.println(resultset);

Desse modo, inseri o código que pediu, mas ele retorna semente o hash do objeto.

package br.com.alura.jdbc;

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

public class TestaInsercao {

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

        String nome, descricao,sql;
        nome = "notebook";
        descricao= "note' i5";

        Connection con = Database.getConnection();

        sql = "insert into produtos (nome, descricao) value (?,?)";

        PreparedStatement statement = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
        statement.setString(1, nome);
        statement.setString(2, descricao);
        boolean resultado = statement.execute();
        System.out.println("é select " + resultado);

        Integer id;
        ResultSet resultset = statement.getGeneratedKeys();    
        System.out.println(resultset);
        while(resultset.next()) {
            id = resultset.getInt("id");
            System.out.println("O id gerado foi " + id);
        }

        resultset.close();
        statement.close();
        con.close();        

    }

}


Console resultado: 

Connection On
é select false
com.mysql.jdbc.JDBC4ResultSet@6576fe71
Exception in thread "main" java.sql.SQLException: Column 'id' not found.
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
    at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1144)
    at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2813)
    at br.com.alura.jdbc.TestaInsercao.main(TestaInsercao.java:31)