Boa tarde,
Ao executar o programa para listar as categorias + os produtos, está ocorrendo a seguinte exceção:
Exception in thread "main" java.sql.SQLException: After end of result set
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)
at com.mysql.cj.jdbc.result.ResultSetImpl.checkRowPos(ResultSetImpl.java:484)
at com.mysql.cj.jdbc.result.ResultSetImpl.getObject(ResultSetImpl.java:1283)
at com.mysql.cj.jdbc.result.ResultSetImpl.getInt(ResultSetImpl.java:786)
at com.mchange.v2.c3p0.impl.NewProxyResultSet.getInt(NewProxyResultSet.java:425)
at br.com.alura.DAO.CategoriaDAO.listarComProdutos(CategoriaDAO.java:61)
at TesteListaDeCategorias.main(TesteListaDeCategorias.java:16)
Seguem as classes utilizadas:
package br.com.alura.modelo;
import java.util.ArrayList;
import java.util.List;
public class Categoria {
private Integer id;
private String nome;
private List<Produto> produtos = new ArrayList<>();
public Categoria(Integer id, String nome) {
this.id = id;
this.nome = nome;
}
public String getNome() {
return nome;
}
public Integer getId() {
return id;
}
public List<Produto> getProdutos() {
return produtos;
}
public void adicionar(Produto produto) {
produtos.add(produto);
}
}
package br.com.alura.DAO;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import br.com.alura.modelo.Categoria;
import br.com.alura.modelo.Produto;
public class CategoriaDAO {
private Connection connection;
public CategoriaDAO(Connection connection) {
this.connection = connection;
}
public List<Categoria> listarCategoria() throws SQLException {
List<Categoria> categorias = new ArrayList<>();
String sql = "SELECT ID, NOME FROM CATEGORIA";
try (PreparedStatement pstm = connection.prepareStatement(sql)) {
pstm.execute();
try (ResultSet rst = pstm.getResultSet()) {
while (rst.next()) {
Categoria categoria = new Categoria(rst.getInt(1), rst.getString(2));
categorias.add(categoria);
}
}
}
return categorias;
}
public List<Categoria> listarComProdutos() throws SQLException {
Categoria ultima = null;
List<Categoria> categorias = new ArrayList<>();
String sql = "SELECT C.ID, C.NOME, P.ID, P.NOME, P.DESCRICAO FROM CATEGORIA C INNER JOIN"
+ " PRODUTO P WHERE C.ID = P.CATEGORIA_ID";
try (PreparedStatement pstm = connection.prepareStatement(sql)) {
pstm.execute();
try (ResultSet rst = pstm.getResultSet()) {
while (rst.next()) {
if (ultima == null || !ultima.getNome().equals(rst.getString(2))) {
Categoria categoria = new Categoria(rst.getInt(1), rst.getString(2));
ultima = categoria;
categorias.add(categoria);
}
}
Produto produto = new Produto(rst.getInt(3), rst.getString(4), rst.getString(5));
ultima.adicionar(produto);
}
}
return categorias;
}
}
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import br.com.alura.DAO.CategoriaDAO;
import br.com.alura.modelo.Categoria;
import br.com.alura.modelo.Produto;
public class TesteListaDeCategorias {
public static void main(String[] args) throws SQLException {
try (Connection connection = new ConnectionFactory().connectionFactory()) {
CategoriaDAO categoriaDAO = new CategoriaDAO(connection);
List<Categoria> listaDeCategorias = categoriaDAO.listarComProdutos();
listaDeCategorias.stream().forEach(ct -> {
for(Produto produto : ct.getProdutos()) {
System.out.println(ct.getNome() + " - " + produto.getNome());
}
});
}
}
}
Poderia me indicar onde esta o erro na Classe CategoriaDAO?
Obrigado!