7
respostas

Galera erro no banco. alias na coluna do banco

Tá dando um erro aqui e faz tempo que está acontecendo desde no começo do curso, e ainda não achei solução :( vou postar o código abaixo, minha classe produto.

public class ProdutoModel {

    private int id;
    private String nome;
    private String descricao;

    public ProdutoModel(String nome, String descricao) {
        this.nome = nome;
        this.descricao = descricao;
    }
    public ProdutoModel(String nome, String descricao, int id) {
        this.nome = nome;
        this.descricao = descricao;
        this.id = id;
    }


    public void setId(int id) {
        this.id = id;
    }


    public String getNome() {
        return nome;
    }

    public String getDescricao() {
        return descricao;
    }

}

Agora a classe ProdutoDAO

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class ProdutoDAO {

    private Connection con;

    public ProdutoDAO(Connection con) {
        this.con = con;
    }

    public void salva(ProdutoModel produto) throws SQLException {
        String sql = "insert into Produto(nome, descricao) values (?, ?)";
        try(PreparedStatement stmt = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
            stmt.setString(1, produto.getNome());
            stmt.setString(2, produto.getDescricao());
            stmt.execute();
            try(ResultSet rs = stmt.getGeneratedKeys()) {    
                if(rs.next()) {
                    int id = rs.getInt("id");
                    produto.setId(id);
                }
            }
        }
    }
    public List<ProdutoModel> lista() throws SQLException {
        List<ProdutoModel> produtos = new ArrayList<>();
        String sql = "select * from Produto";
        try(PreparedStatement stmt = con.prepareStatement(sql)) {
            stmt.execute();
            transformaResultadoEmBusca(stmt, produtos);
        }
        return produtos;
    }

    private void transformaResultadoEmBusca(PreparedStatement stmt, List<ProdutoModel> produtos) throws SQLException {
        try(ResultSet rs = stmt.getResultSet()) {
            while(rs.next()) {
                int id = rs.getInt("id");
                System.out.println("Código: " + id);
                String nome = rs.getString("nome");
                System.out.println("Nome: " + nome);
                String descricao = rs.getString("descricao");
                System.out.println("Descrição: " + descricao);
                ProdutoModel produto = new ProdutoModel(nome, descricao, id);
                produtos.add(produto);
            }
        }
    }
}

Lembrando que não coloquei a connectionPool porque queria testar sem ela, e mesmo assim ocorre o erro, Agora a classe de teste.

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

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

        ProdutoModel mesa = new ProdutoModel("Mesa Azul","Mesa com 4 pés");
        try(Connection con = DataBase.getConnection()) {
            ProdutoDAO dao = new ProdutoDAO(con);
            dao.salva(mesa);

            List<ProdutoModel> produtos = dao.lista();
            for(ProdutoModel produto: produtos) {
                System.out.println("Existe o produto: " + mesa);
        }
        }
    }
}

O erro que está acontecendo é o seguinte; Exception in thread "main" java.sql.SQLException: Column 'id' not found.

Está dizendo que não encontra a coluna id, mais o engraçado que na hora da busca, usando oque vou fazer aqui da certo

    try(Connection con = DataBase.getConnection()) {
            String sql = "select * from produto";
            try(PreparedStatement stmt = con.prepareStatement(sql)) {
                stmt.execute();
                try(ResultSet rs = stmt.getResultSet()) {
                    while(rs.next()) {
                        int id = rs.getInt("id");
                        System.out.println("Código: " + id);
                        String nome = rs.getString("nome");
                        System.out.println(nome);
                        String descricao = rs.getString("descricao");
                        System.out.println(descricao);
                        System.out.println("");
                    }
                }
            }
        }
    }
}

Na hora dessa busca aqui retorna sem o erro, mais na hora de fazer o

try(Connection con = DataBase.getConnection()) {
            con.setAutoCommit(false);
            String sql = "insert into produto(nome, descricao) values (?, ?)";
            try(PreparedStatement stmt = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
                adiciona("Ferro","Ferro de passar roupa vaporizado", stmt);
                adiciona("NoteBook","NoteBook'i5",stmt);
                con.commit();
            }
        }
    }

    private static void adiciona(String nome, String descricao, PreparedStatement stmt) throws SQLException {
        stmt.setString(1, nome);
        stmt.setString(2, descricao);
        stmt.execute();
    }
}

não retorna e da aquele erro do id, lembrando aque aqui eu tirei o ResutSet porque se nao ocorre o erro do id. Oque que pode ser? To usando o banco de dados mysql, e na hora da criação do bando fiz o seguinte

create database loja_virtual;
use loja_virtual;
Fui em tables criei uma tabela Produto
Com os campos id e ativei o meu PK/primary Key, NN/Not null,AI/autoincrimental.

Oque está ocorrendo meu ajudeee :(

7 respostas

Bom, não posso negar que se ele diz que a coluna id não existe a minha tendência é em acreditar :). Coloca aqui o resultado do comando desc Produto. Esse comando vc roda no mysql. Ele vai informar as colunas da sua tabela...

ta aqui o comando.

id int(11) NO PRI auto_increment nome varchar(45) YESdescricao varchar(45) YES

Ja tentei de tudo mais não consegui tirar esse erro :(

Apos fazer o "insert into" o seu "stmt.execute();" retorna true ou false?

faz o seguinte vai direto no banco e faz o insert direto na tabela, assim vamos isolar o erro, ou seja, identificar se o erro está na tabela ou na app.

insert into produto(nome, descricao) values (?, ?) e veja se inseriu corretamente

Estava com o mesmo problema:

Exception in thread "main" java.sql.SQLException: Column 'id' not found.

Resolvi quando substitui o "id" pelo numero 1, no método salva(Produto produto) da classe produtosDAO

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

ficando assim:

public void salva(Produto produto) throws SQLException {
        String sql = "insert into Produto (nome, descricao) values (?,?)";

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

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

            try (ResultSet rs = stmt.getGeneratedKeys()) {
                if (rs.next()) {
                    int id = rs.getInt(1);
                    produto.setId(id);
                }

            }

        }
    }

Espero que tenha ajudado.

Sim renan também fiz isso, agora ja está rodando tudo perfeitamente, mesmo assim obrigado!