Ajuda com SELECT em POSTGRES, retornando null! [Resolvido]

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.

Ao invés de usar o rs.next() que é utilizado para montar listas como no seu segundo exemplo, já tentou mudar para rs.first() para retornar um único registro ?

Jonathan_Medeiros, não erra esse o erro (acabei encontrando!), mas agradeço a atenção.

Nunca usei com rs.first(), mas vou tentar depois também.

Att.

Pessoal, desculpa a “ignorância”, mas acabei achando o erro!!!

Coisas de CTRL+C / CTRL+V.

Foi só alterar a linha stmt.setInt(1, produto.getId()) para stmt.setInt(1, id).

Passei o id por parâmetro, mas não utilizei!! Vacilada!!

E usei o if ao invés while.

De qualquer forma, fica o código aí como referência.

Se tiverem alguma sugestão também.

Att.