0

我希望同时使用 SQL 连接池(通过 HikariCP)和CachedRowSet. 但我想澄清一下它们是如何相互作用的。

在下面的示例中,我创建了一个连接池(使用 HikariCP),从池中获取连接,执行查询,然后CachedRowSet使用从执行返回的 ResultSet 填充分页,然后对其进行处理和迭代。

RowSetFactory rowSetFactory = RowSetProvider.newFactory();
HikariDataSource connectionPool = new HikariDataSource(......);
Connection conn = connectionPool.getConnection();

CachedRowSet cachedRowSet = rowSetFactory.createCachedRowSet();
cachedRowSet.setPageSize(10);

SQLServerPreparedStatement queryStatement = connection.prepareStatement(......).unwrap(SQLServerPreparedStatement.class);;

ResultSet resultSet = queryStatement.executeQuery();
cachedRowSet.populate(resultSet);

while(cachedRowSet.nextPage()){
    
    while(cachedRowSet.next()){

        //Process data
    }

}

我的问题是如何/何时将连接添加回池中?要返回一个连接,我通常会调用conn.close(),但是我不确定 CachedRowSet 内部会发生什么。调用 `cachedRowSet.populate(...) 后是否立即关闭连接?或者直到所有结果都被迭代完?

我的目标是避免长时间从池中取出连接,同时还能够处理潜在的长时间运行和处理密集型查询。

4

0 回答 0