下面是我用来获取DB连接的助手类:

我已经按照描述的here使用了C3P0连接池.

public class DBConnection {

    private static DataSource dataSource;
    private static final String DRIVER_NAME;
    private static final String URL;
    private static final String UNAME;
    private static final String PWD;

    static {

        final ResourceBundle config = ResourceBundle
                .getBundle("props.database");
        DRIVER_NAME = config.getString("driverName");
        URL = config.getString("url");
        UNAME = config.getString("uname");
        PWD = config.getString("pwd");

        dataSource = setupDataSource();
    }

    public static Connection getOracleConnection() throws SQLException {
        return dataSource.getConnection();
    }

    private static DataSource setupDataSource() {
        ComboPooledDataSource cpds = new ComboPooledDataSource();
        try {
            cpds.setDriverClass(DRIVER_NAME);
        } catch (PropertyVetoException e) {
            e.printStackTrace();
        }
        cpds.setJdbcUrl(URL);
        cpds.setUser(UNAME);
        cpds.setPassword(PWD);
        cpds.setMinPoolSize(5);
        cpds.setAcquireIncrement(5);
        cpds.setMaxPoolSize(20);
        return cpds;
    }
}

在DAO中,我将编写如下内容:

try {
            conn = DBConnection.getOracleConnection();

            ....


} finally {
    try {
        if (rs != null) {
            rs.close();
        }
        if (ps != null) {
            ps.close();
        }
        if (conn != null) {
            conn.close();
        }
    } catch (SQLException e) {
        logger
                .logError("Exception occured while closing cursors!", e);

    }

现在,我的问题是,除了关闭最后的挡路中列出的cursors(connection/statement/resultSet/preparedStatement)之外,我还应该费心做任何其他清理工作吗?

什么是this清理??我应该在何时何地做这件事?

如果您发现上述代码中有任何错误,请指出.

推荐答案

对于池数据源,池中的连接实际上并没有关闭,它们只是返回到池中.然而,当应用程序关闭时,那些与数据库的连接应该正确地、实际地关闭,这就是最终清理的目的.

顺便说一句,c3p0项目基本上已经完蛋了,我建议你改用Apache Commons DBCP,它仍在维护中.

Database相关问答推荐

postgres 索引扫描的启动成本(postgresql 书的内部 struct )

如何将初始数据放入数据库

Active Record - 获取数据库中的第二个、第三个.. 项(无 ID)

如何在 C# 控制台应用程序中执行 CMD 命令?

创建一个spell check,判断具有合理运行时间的数据库

实体关系图. IS A 关系如何转换为table表?

存储过程的缺点

NameError:设置更改为 mysql 后未定义名称_mysql

如何从 MySQL 行中修剪前导和尾随引号?

nvarchar (50) 与 nvarchar (max) 的含义

数据库中一致且全面的地址存储的最佳实践

是什么导致pyodbcunable to connect to data source?

我应该使用 NULL 还是空字符串来表示表列中没有数据?

数以百万计的条目排名

Django Atomic Transaction 是否锁定数据库?

如何在实体框架中使用字符串属性作为主键

将一行连接到另一个表中的多行

如何将纬度/经度对转换为 PostGIS 地理类型?

将内存数据库保存到磁盘

如何修复 Postgres 上过时的 postmaster.pid 文件?