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

PQ não da certo o retorno da chave gerada dá sempre esse erro

 public class TestaConexao { public static void main(String[] args) SQLException {
     Conexao com = new Conexao(); Connection conexao = com.getConexao(); 
     Statement stmt = conexao.createStatement(); boolean resultado = stmt.execute("Insert into produto (id,nome) Values (null,'roger')", stmt.RETURN_GENERATED_KEYS);
     ResultSet res = stmt.getGeneratedKeys(); 
        while (res.next()) {
                 String id = res.getString("id"); System.out.println(id); 
        } 
        conexao.close();
     }
 }
14 respostas

un: Exception in thread "main" java.sql.SQLException: Column 'id' not found. at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:988) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:974) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919) at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1167) at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5733) at ConexaoJDBC.TestaConexao.main(TestaConexao.java:27) /home/roger/.cache/netbeans/8.2/executor-snippets/run.xml:53: Java returned: 1 FALHA NA CONSTRUÇÃO (tempo total: 0 segundos)

Roger

Eu acho que a exception acontece pois vc está tentando fazer um insert em um id como null.

Pelo que vi, o id da tabela produto está gerando automaticamente, então o insert tem que ser algo assim :

insert into Produto (nome, descricao) values ("paçoca", "comida divina");

Assim o gerenciador do banco vai ficar responsável de dar um id legalzão.

Faça esse teste me diz se deu certo.

Abraço

Olá Roger,

na sua exception ele está acusando um Column id not found, ou seja, ele não encontrou a coluna id na tabela do produto. Eu vi que você também está tentando inserir o id como null. Isso é um pouco ruim dado que usamos o id como o identificador de cada produto e para fazer relações com outras tabelas.

Se você tiver a coluna id no banco, veja se ela está marcada como sendo a chave primária e se seu valor já é adicionado automaticamente pelo banco. Por exemplo, no MySQL o id deveria ser uma Primary Key com o Auto_Increment. Que ai você nem precisa passar o id no seu insert, só o nome que o id o próprio banco vai inserir.

Sim eu entendi mais na tabela tem o id

sendo primary key

+-------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | nome | varchar(255) | NO | | NULL | | +-------+--------------+------+-----+---------+----------------+ 2 rows in set (0.00 sec)

mysql>

esse é o retorno do describe no mysql já tem o id não sei pq

Olha como está minha sql Insert into produto (nome) Values ('roger')

Executando o insert apenas com o nome do produto ele dá o mesmo erro?

Sim dá o mesmo

Verifique se a linha que ele está acusando o erro de Column id not found é na linha do insert ou na linha em que você faz o res.getString("id"). Meu chute é que o erro ocorre na verdade quando você tenta fazer o res.getString("id"), dado que na verdade o id é um inteiro então deveria ser um res.getInt("id").

mesmo eu colocando o getInt continua dando o mesmo erro já tinha testado

Estranho... por algum motivo o seu getInt ou getString não está reconhecendo a coluna id no banco. Veja se pegando pelo indice ele traz a informação, tipo:

String id = res.getString(1)

solução!

resolvido obrigado pela ajuda

Muito bizarro! Aconteceu comigo a mesma coisa! Tecnologia deveria ser uma ciência exata! :-)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software