Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Como implementar pool de conexões com PostgreSQL - Aula 05

Tentei adequar os exemplos do da aula 5 com o banco PostgreSQL. Minha classe Database ficou assim:

public class Database {

    private PGConnectionPoolDataSource pool;

    public Database() {
        PGConnectionPoolDataSource pool = new PGConnectionPoolDataSource();
        pool.setUrl("jdbc:postgresql://localhost:5432/postgres");
        pool.setUser("postgres");
        pool.setPassword("postgres");
        this.pool = pool;
    }

    public Connection getConnection() throws SQLException {
        System.out.println("Abrindo conexão com o banco de dados");
        pool.getParentLogger();
        //Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres", "postgres", "postgres");
        Connection connection = pool.getConnection();
        return connection;
    }    

}

Método que retorna a listagem de produtos (modifiquei um pouco a tabela, pouco mesmo):

    public static void main(String[] args) throws SQLException {
        Connection connection = new Database().getConnection();

        for (int i = 0; i<100;i++){

            Statement statement = connection.createStatement();
            statement.execute("select * from Produto");
            ResultSet resultSet = statement.getResultSet();

            while (resultSet.next()) {
                int id = resultSet.getInt("id");
                String titulo = resultSet.getString("titulo");
                String descricao = resultSet.getString("descricao");
                String paginas = resultSet.getString("paginas");

                System.out.println("id=" + id + ", titulo=" + titulo + ", descricao=" + descricao+ ", paginas=" + paginas);
            }

            resultSet.close();
            statement.close();
            connection.close();
        }
    }

Recebo o seguinte erro:

Exception in thread "main" org.postgresql.util.PSQLException: This connection has been closed.

Contudo, na aula diz que ao fechar a conexão, ela é devolvida ao pool, e isso não ocorre. Sugestões?

2 respostas

Coloque o código Connection connection = new Database().getConnection() dentro do for, acredito que funcionará.

solução!

A instrução new Database(); deve ficar fora do for:

Database database = new Database();

for (int i = 0; i<100;i++){
    Connection connection = database.getConnection();
...
}