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

Field 'id' doesn't have a default value


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

public class InserirProdutos {

    public static void main(String[] args) throws SQLException {
        //faz conexao com banco
        Connection con
                = DriverManager.getConnection("jdbc:mysql://localhost/lojadb", "root", "root");

        Statement stm = con.createStatement();

        boolean resultado
                = stm.execute("insert into Produto"
                        + " (nome, descricao) values"
                        + " ('notebook','Notebook i5')", Statement.RETURN_GENERATED_KEYS);
        //retorna todos os ids gerados para cada produto inserido
        ResultSet resultSet = stm.getGeneratedKeys();

        while (resultSet.next()) {
            long id = resultSet.getLong("id");
            System.out.println(id + "gerado");
        }

        System.out.println("o resultado foi" + resultado);
        resultSet.close();
        stm.close();
        con.close();
    }

}

qual o problema?

11 respostas

Tente utilizar o SQL de inclusão da seguinte forma:

insert into Produto (id,nome, descricao) values(null,'notebook','Notebook i5')

Se o campo estiver configurado como AUTOINCREMENT no MYSQL, se não me engano, vai computar o INSERT com valor nulo para o id como um novo valor de auto incremento.

Não testei aqui, mas quando trabalhei com MYSQL fazia dessa forma.

não funcionou se eu coloque null, ele falar que o id não exite 'id not fund'

Sua tabela não possui esse campo? Deveria, não? Talvez seja esse o problema... Qual é a chave primária?

Claro que tenho moço, inclusive  ele consegue inerir
só não consegue é fazer a consulta utilizando o método abaixo
 ResultSet resultSet = stm.getGeneratedKeys();

        while (resultSet.next()) {
            long id = resultSet.getLong("id");
            System.out.println(id + "gerado");
        }

iiixx.. então sei não... verifica se o campo id é AUTO_INCREMENT...

situação estranha...

Posta a classe produto aqui pra gente ver

Posta a classe produto aqui pra gente ver, meu chute é a seguinte situação, você não está incrementando esse ID no seu banco, e também não está falando que id ta sendo no insert. Tenta

insert into Produto (id,nome, descricao) values(1'notebook','Notebook i5')

Mais não deixa de postar sua classe produto

@Alisson, cuidado... faltou uma vírgula no SQL sugerido ai

insert into Produto (id,nome, descricao) values(1,'notebook','Notebook i5')

@W.K ALMEIDA tenta inserir mais de um tb...

insert into Produto (id,nome, descricao) values(1,'notebook','Notebook i5');
insert into Produto (id,nome, descricao) values(2,'notebook 2','Notebook i7');
insert into Produto (id,nome, descricao) values(3,'notebook 3','Notebook i3');

não esquece da vírgula...

CREATE TABLE Produto (
id INTEGER  PRIMARY KEY AUTO_INCREMENT,
 nome VARCHAR(255),
 descricao VARCHAR(255)
);

COLOQUEI SÓ PRA POSTAR MESMO, mas vocês não entenderem a tabela é regada no banco eu consigo fazer insert mas só não consigo buscar os ids utilizando o banco MySql como propõe o exercício, a diferença é que no curso ele utiliza outro banco.

Agora vc explicou....

=D

Cara... estranho esse problema... verifique a versão do driver (certifique-se de usar uma versão recente... ou usar uma versão um pouco menos recente).

Outra coisa que faria é debugar esse objeto "resultSet". Qual o número de registros? O erro é disparado depois da linha em que o resultado é recuperado?

Enfirm... parte pro desespero... tenta saber tudo minunciosamente pq esse erro ta bem estranho. Eu sou ateu, mas nesse caso ai eu tentaria umas 3 ave maria e um pai nosso... quem sabe, né?

solução!

Cara faz um teste que acho que pode dar certo, no lugar no seu.

while (resultSet.next()) {
            long id = resultSet.getLong("id");
            System.out.println(id + "gerado");
        }

Faz.

while (resultSet.next()) {
            String id = resultSet.getLong("id");
            System.out.println(id + "gerado");
        }

Me da o retorno, abraço