查找与Connection相关的语句

时间:2013-05-06 11:02:34

标签: java connection

我正在开发一个使用连接池的大型应用程序,并且使用其连接有很多类。 最近我们遇到了一些问题,因为有些类在调用connection.close()方法之前没有关闭语句,错误地认为当连接关闭时,任何相关语句也都会关闭。

目前我正在重构一些代码并开发一个抽象类来管理连接(从中获取它们并将它们放回到数据源中)并将语句细节保留在子类中。

为了避免以后与未关闭的语句相关的错误,我考虑在将连接恢复到池之前实现一些检查,如果我发现一些打开的语句要么关闭它们,要么记录警告。

结果类看起来像这样:

public abstract class AbstractDatabaseLoader {

    private DataSource dataSource;

    public final DatabaseValues load(DatabaseParams params) {

    DatabaseValues result = null;
    Connection connection = null;

    try {
        connection = dataSource.getConnection();
        result = load(connection, params);
    } catch (Exception ex) {
        // some logging;
    } finally {
        if (connection != null) {
            try {
                if (validateStatements(connection)){
                    logger.warn("The Connection is being returned into the POOL with opened Statments!");
                }
                connection.close();
            } catch (SQLException e) {
                // some logging.
            }
        }
    }
    return result;

    }

    protected abstract DatabaseValues load(Connection connection, DatabaseParams params);

    private boolean validateStatements(Connection connection){
        // Do Something here to validate if statements were properly closed.
    }

}

但是,我发现无法从连接接口恢复语句。

所以:

  1. 这是否可以,而不必依赖于具体的实施?
  2. 你会推荐这种方法吗?
  3. 非常感谢,

    卡尔斯

1 个答案:

答案 0 :(得分:1)

Connection.close API说

Releases this Connection object's database and JDBC resources immediately instead of waiting for them to be automatically released. 

如果它甚至是连接池,其中连接实际上没有关闭,则连接池提供程序有义务关闭此Connection创建的所有语句和ResultSet,这是优秀的提供程序在实践中所做的事情,请参阅commons-dbcp http://commons.apache.org/proper/commons-dbcp/apidocs/org/apache/commons/dbcp/DelegatingConnection.html#close()它说Closes the underlying connection, and close any Statements that were not explicitly closed.