Boa tarde.
Estou tentando fazer um SELECT no banco de dados com POSTGRES, para me retornar um produto de um determinado ID, mas está retornando null!
O código completo que estou fazendo esta abaixo:
// lê e retorna um produto apartir de um ID
public static Produto readID(Integer id) {
Connection con = Connection_BD.getConnection();
PreparedStatement stmt = null;
ResultSet rs = null;
Produto produto = new Produto();
try {
String sql = "SELECT * FROM produtos WHERE id_produto = ?";
stmt = con.prepareStatement(sql);
stmt.setInt(1, produto.getId());
rs = stmt.executeQuery();
while (rs.next()) {
produto.setId(rs.getInt("id_produto"));
produto.setNome(rs.getString("nome"));
produto.setCategoria(rs.getString("categoria"));
produto.setPreco(rs.getDouble("preco"));
produto.setId_fornecedor(rs.getInt("fornecedor_id"));
}
} catch (SQLException ex) {
System.out.println(ex);
} finally {
Connection_BD.closeConnection(con, stmt, rs);
}
return produto; // retorna o produto
}
A principio, tentei usar com if (rs.next()){} ao invés de while (rs.next()){}, achei que era onde estava dando erro.
Abaixo um código similar, mas me retorna toda a lista de todos os registros.
// lê e retorna uma lista com todos registros
public static List<Produto> read() {
Connection con = Connection_BD.getConnection();
PreparedStatement stmt = null;
ResultSet rs = null;
List<Produto> produtos = new ArrayList<>();
try {
String sql = "SELECT * FROM produtos";
stmt = con.prepareStatement(sql);
rs = stmt.executeQuery();
while (rs.next()) {
Produto produto = new Produto();
produto.setId(rs.getInt("id_produto"));
produto.setNome(rs.getString("nome"));
produto.setCategoria(rs.getString("categoria"));
produto.setPreco(rs.getDouble("preco"));
produto.setId_fornecedor(rs.getInt("fornecedor_id"));
produtos.add(produto); // adiciona as colunas à lista
}
} catch (SQLException ex) {
System.out.println(ex);
} finally {
Connection_BD.closeConnection(con, stmt, rs);
}
return produtos; // retorna a lista
}
Esta acima esta funcionando o que fiz, foi alterar a string sql para "SELECT * FROM produtos WHERE id_produto = ?" e acrescentar stmt.setInt(1, produto.getId()).
Obs.: Testei o sql "SELECT * FROM produtos WHERE id_produto = ?" no pgAdmin III, passando no lugar de “?” um id qualquer, funcionou perfeitamente, ou seja, não é o sql que está errado.
Como disse, o último código, que me retorna toda a lista esta funcionando corretamente, mas, debugando o código (que quero que me retorne apenas o produto do id passado por parâmetro) vi que tanto if (rs.next()){} ou while (rs.next()){}, cai direto em SQLException.
Não sei o que está passando despercebido!!
Alguma ajuda?
Att.