java - 使用 DbUtils QueryRunner 不会关闭数据库连接

标签 java mysql connection apache-commons-dbutils

我使用 DbUtils 库和 QueryRunner 类来运行我的查询。根据我对 DbUtils 文档的理解,我不需要担心关闭连接。但是由于某种原因,它不会自动甚至手动关闭我的连接。这是我的代码:

 public static DataSource createDataSource() {
    BasicDataSource d = new BasicDataSource();
    d.setDriverClassName(Globals.getInstance().getKonfiguracija().dajPostavku("driver"));
    d.setUsername(Globals.getInstance().getKonfiguracija().dajPostavku("dbUsername"));
    d.setPassword(Globals.getInstance().getKonfiguracija().dajPostavku("dbPassword"));
    d.setUrl(Globals.getInstance().getKonfiguracija().dajPostavku("serverDatabase"));
    return d;
}

public static void insertSQL(String sql)
{
    DataSource dataSource = createDataSource();
    QueryRunner qr = new QueryRunner(dataSource);

    try {
        int inserts = qr.update(sql);
        qr.getDataSource().getConnection().close();

    } catch (SQLException ex) {
        Logger.getLogger(DBController.class.getName()).log(Level.SEVERE, null, ex);
    }

}

由于我有定期调用 insertSQL 方法的线程,一段时间后我收到“连接过多”错误。我使用的是最新版本的 Tomcat,数据库是 MYSQL。

最佳答案

每次调用 insertSQL() 方法时,您都会创建一个新的 DataSource:这可能是导致异常的原因。

相反,您应该创建一次 DataSource,然后将该实例传递给 QueryRunner 构造函数,例如:

QueryRunner queryRunner = new QueryRunner(dataSource);

使用DataSource,您通常不需要手动关闭连接。

参见https://commons.apache.org/proper/commons-dbutils/examples.html了解更多示例。

关于java - 使用 DbUtils QueryRunner 不会关闭数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37763600/

相关文章:

java - 为什么在android中命名资源不能使用大写?

mysql - 从 left join 获取所有用户 id

不同服务器上的php/mysql连接

postgresql - 使用 SSH 堡垒将 dbt 连接到 Postgres

java - Itext PDF 显示空白页

Java,如何在 JavaFX 中暂停

php - Propel - 使用多个外键连接同一个表

linux - LDAP 监听本地主机但主机名或 IP

redis - Jedis连接到redis : JedisConnectionException

java - spring 是否有办法在应用程序首次加载时加载东西?在全局范围内