Estou com um problema de referência e nãoestou conseguindo resolver. Como posso resolver ou pesquisar sobre esse tipo de erro?
Segue o código:
package loja_virtual_repository.modelo;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import com.mysql.cj.exceptions.ConnectionIsClosedException;
import loja_virtual_repository.FabricaDeConexao;
import loja_virtual_repository.dao.ProdutoDAO;
public class TestaInsercaoEListagemComProduto {
public static void main(String[] args) throws SQLException {
Produto comoda = new Produto("Cômoda", "Cômoda madeira");
try (Connection connection = new FabricaDeConexao().recuperarConexao()) {
PersistenciaProduto persistenciaProduto = new PersistenciaProduto(connection);
persistenciaProduto.salvarProduto(comoda);
List<Produto> listaDeProdutos = ProdutoDAO.listar();
listaDeProdutos.stream().forEach(lp -> System.out.println(lp));
}
}
}
Classe ProdutoDAO
package loja_virtual_repository.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 loja_virtual_repository.modelo.Produto;
public class ProdutoDAO {
private Connection connection;
public ProdutoDAO(Connection connection) {
this.connection = connection;
}
public void salvarProduto(Produto produto) throws SQLException {
String sql = "INSERT INTO PRODUTO (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 PRODUTO ";
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;
}
}