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 :(