HikariCP - 没有合适的驱动程序错误

HikariCP - no suitable driver error

我尝试为 java 1.6/1.7 切换到 Hikari-CP,但我收到以下错误:

Caused by: java.sql.SQLException: No suitable driver
    at java.sql.DriverManager.getDriver(DriverManager.java:278) ~[na:1.7.0_45]
    at com.zaxxer.hikari.util.DriverDataSource.<init>(DriverDataSource.java:52) ~[HikariCP-java6-2.3.5.jar:na]
    ... 82 common frames omitted

我正在使用 Oracle 数据库。

我听起来好像驱动程序 jar 在类路径中不可见,或者驱动程序不是自注册驱动程序。你使用什么数据库?请为您的问题添加更多详细信息。

文档中的这一行就是原因。

将此 属性 与 "old" 驱动程序一起使用时,您可能还需要设置 driverClassName 属性,但请先尝试不设置。

我明确设置 driverClassName 的那一刻它就开始工作了。

  • 确保预期的 JdbcDriver 可用

如果您是 运行 一个 jar 工件,您可以使用 Linux/MacOS 中的以下命令进行验证,(示例显示 mysql jdbc Driver

$ jar -tvf your-lovely.jar  | grep "com/mysql/cj/jdbc/Driver"
   733 Sun Mar 25 07:00:36 PDT 2018 com/mysql/cj/jdbc/Driver.class
  • 如果 JdbcDriver 可用但您仍然收到 No suitable driver 错误,请注册 JdbcDriver.

示例使用 HicariConfig#setDriverClassName

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

import java.sql.Connection;
import java.sql.SQLException;

class ConnectionPool {

    private HikariDataSource ds = new HikariDataSource(getConfig());

    private HikariConfig getConfig() {

        HikariConfig config = new HikariConfig();

        config.setJdbcUrl("jdbc:mysql://localhost:3306/lovely_database_name");
        config.setUsername("root");
        config.setPassword("root");
        config.setDriverClassName("com.mysql.cj.jdbc.Driver"); //alternative is Class.forName("com.mysql.cj.jdbc.Driver")

        config.addDataSourceProperty("cachePrepStmts", "true");
        config.addDataSourceProperty("prepStmtCacheSize", "250");
        config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");

        return config;
    }

    Connection getConnection() throws SQLException {
        return ds.getConnection();
    }
}

如果您确定驱动程序 jar 和其他依赖项已到位并且您收到了此错误,请尝试通过这种方式建立连接。

config.setJdbcUrl(JDBC_URL);
config.setUsername(JDBC_USERNAME);
config.setPassword(JDBC_PASSWORD);
config.setDriverClassName(JDBC_DRIVERCLASSNAME);

HikariCp 看起来像这样的这些属性。

如果您尝试通过 属性 为 drriver clss 提供服务,它将无法工作,您将收到与驱动程序相关的错误。

props.addDataSourceProperty("dataSourceClassName", "com.mysql.cj.jdbc.Driver");