Java HikariCP连接泄漏

Java HikariCP连接泄漏,java,database-connection,Java,Database Connection,我正在开发一个在Java服务器上运行的游戏。对于数据库池,我使用的是HikariCP,这是一个非常好的库,但它现在以我的方式抛出以下错误: [Hikari housekeeper (pool HikariPool-0)] WARN com.zaxxer.hikari.pool.ProxyLeakTask - Connection leak detection triggered for connection com.mysql.jdbc.JDBC4Connection@5910e440, sta

我正在开发一个在Java服务器上运行的游戏。对于数据库池,我使用的是HikariCP,这是一个非常好的库,但它现在以我的方式抛出以下错误:

[Hikari housekeeper (pool HikariPool-0)] WARN com.zaxxer.hikari.pool.ProxyLeakTask - Connection leak detection triggered for connection com.mysql.jdbc.JDBC4Connection@5910e440, stack trace follows
java.lang.Exception: Apparent connection leak detected
    at nl.finicky.lemonade.database.Database.prepare(Database.java:43)
    at nl.finicky.lemonade.rooms.RoomFactory.loadRoom(RoomFactory.java:25)
    at nl.finicky.lemonade.rooms.RoomFactory.<init>(RoomFactory.java:20)
    at nl.finicky.lemonade.Lemonade.main(Lemonade.java:30)
这只是初始化语句的基本方法。调用此函数时,我使用它,然后调用
resultSet.close()
preparedStatement.getConnection.close()
preparedStatement.close()

但它仍然告诉我连接已打开


我如何解决这个问题?谢谢

稍后调用
preparedStatement.getConnection.close()
只会得到一个不同的连接并将其关闭

你不能用这种模式做你想做的事。调用
this.dataSource.getConnection().prepareStatement(…)
就是从池中获取一个连接,并丢弃对它的引用,之后没有人可以关闭它。在这个方法中,即使保留了对它的引用,也不能关闭连接,因为这样返回的PreparedStatement将不可用

public PreparedStatement prepare(String query) {
    PreparedStatement statement = null;

    try {
        while (statement == null) {
            statement = this.dataSource.getConnection().prepareStatement(query, 1); 
// The line triggering the error ^

            if (statement != null) {
                this.databasePool.getStorage();
            }
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        return statement;
    }
}