java - HikeriCP : java. sql.SQLException:关闭与显式目录的连接时目录不能为空

标签 java mysql jdbc connection-pooling hikaricp

我正在尝试在 Java 应用程序中使用 HikariCP 来实现与 MySQL 的连接池。

由于数据库设计缺陷,该应用程序使用不同的数据库,我必须显式调用 connection.setCatalog() 以在需要时更改数据库。

当我尝试关闭使用默认数据库的连接(没有调用 setCatalog() )时,一切正常,连接返回到池中。但是如果这是到另一个数据库的连接(使用 setCatalog()),当我调用 close() 方法时会出现以下异常:

java.sql.SQLException: Catalog can not be null
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:988)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:974)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919)
    at com.mysql.jdbc.ConnectionImpl.setCatalog(ConnectionImpl.java:5324)
    at com.zaxxer.hikari.pool.PoolElf.resetConnectionState(PoolElf.java:263)
    at com.zaxxer.hikari.pool.PoolBagEntry.resetConnectionState(PoolBagEntry.java:122)
    at com.zaxxer.hikari.proxy.ConnectionProxy.close(ConnectionProxy.java:193)
    at someapp.repository.MySqlRepository.closeConnection(MySqlRepository.java:198)...

不用说我已经检查了目录是否为空:

public void closeConnection() throws SQLException{
        System.out.println("trying to close with catalog:"+connection.getCatalog());

        if(connection!=null){

        //connection.setCatalog("defaultdb");
            connection.close();

        }
        this.connection=null;
    }

如果我取消注释 connection.setCatalog("defaultdb") 以将目录设置回默认值,问题仍然存在。

唯一一切正常的情况是我根本不使用 setCatalog() 方法。

当明确设置目录时,这是 hikaricp 的问题吗?有没有办法关闭连接并将其发送回池?

最佳答案

感谢@brettw,要解决这个问题,您必须在 HikariCP 属性中设置一个默认目录:

    HikariConfig conf = new HikariConfig();

    ....

    conf.setCatalog(DatabaseConfiguration.JDBC_DEFAULT_DATABASE);

    ds = new HikariDataSource(conf);

关于java - HikeriCP : java. sql.SQLException:关闭与显式目录的连接时目录不能为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32377477/

相关文章:

asp.net - ASP .NET 与 MySQL - 使用 TINYINT 与 asp :Checkbox

mysql - 如何显示表中的一半记录?数据库

java - 从 Java 类调用 Groovy Closure - 它会编译吗?

java - 更新客户端 bundle 时,未更新的 bundle 中出现 UnsatisfiedLinkError

java - 在java中如何使用属性将多个值从一个类传递到另一个类?

java - JDBC : Connect to Oracle DB through tnsname strange error

java - 使用 Callable 语句在数据库中批量插入存储过程

java - 延迟 ActionListener 中的操作?

php - 用于处理访客数据的 Mongodb Schema

java - Jackson 内部使用 java 序列化还是完全独立?