Tive um erro nesta aula ao tentar listar os produtos por categoria. Vi que um outro aluno teve um erro semelhante, mas no tópico já fechado não vi uma solução. Segue o erro:
Exception in thread "main" java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM CATEGORIA' at line 1
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:916)
at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:354)
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.execute(NewProxyPreparedStatement.java:67)
at br.com.alura.jdbc.dao.CategoriaDAO.listar(CategoriaDAO.java:26)
at br.com.alura.jdbc.modelo.TestaListagemCategorias.main(TestaListagemCategorias.java:18)
Segue o código do método de listagem feito seguindo o professor:
package br.com.alura.jdbc.dao;
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;
import br.com.alura.jdbc.modelo.Categoria;
import br.com.alura.jdbc.modelo.Produto;
public class ProdutoDAO {
private Connection connection;
public ProdutoDAO(Connection connection) {
this.connection = connection;
}
public void salvar(Produto produto) throws SQLException {
String sql = "insert into produtos (nome, descricao) values (?, ?)";
try(PreparedStatement pstm = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
pstm.setString(1, produto.getNome());
pstm.setString(2, produto.getDescricao());
pstm.execute();
try(ResultSet rst = pstm.getGeneratedKeys()) {
while(rst.next()) {
produto.setId(rst.getInt(1));
}
}
}
}
public List<Produto> listar() throws SQLException {
List<Produto> produtos = new ArrayList<>();
String sql = "select id, nome, descricao from produtos";
try(PreparedStatement pstm = connection.prepareStatement(sql)) {
pstm.execute();
try(ResultSet rst = pstm.getResultSet()) {
while(rst.next()) {
Produto produto = new Produto(rst.getInt(1), rst.getString(2), rst.getString(3));
produtos.add(produto);
}
}
}
return produtos;
}
public List<Produto> listarPorCategoria(Categoria ct) throws SQLException {
List<Produto> produtos = new ArrayList<>();
String sql = "select id, nome, descricao from produtos where categoria_id = ?";
try(PreparedStatement pstm = connection.prepareStatement(sql)) {
pstm.setInt(1, ct.getId());
pstm.execute();
try(ResultSet rst = pstm.getResultSet()) {
while(rst.next()) {
Produto produto = new Produto(rst.getInt(1), rst.getString(2), rst.getString(3));
produtos.add(produto);
}
}
}
return produtos;
}
}
As classes estão compilando normalmente, mas apenas nessa listagem ocorre esse erro. Além disso, consigo realizar a consulta normalmente pelo MySQL. Já estou tentando encontrar a falha há um tempo, mas infelizmente não consegui achar.