Java MySQL连接没有';我不能和HikariCP一起工作

Java MySQL连接没有';我不能和HikariCP一起工作,java,mysql,database,jdbc,hikaricp,Java,Mysql,Database,Jdbc,Hikaricp,HikariCP版本:2.6.1 JDK版本:1.8.0_111 数据库:MySQL 驱动程序版本:5.1.6 这是我的代码: HikariConfig config = new HikariConfig(); config.setDataSourceClassName("com.mysql.jdbc.jdbc2.optional.MysqlDataSource"); config.setJdbcUrl("jdbc:mysql://localhost:3306/mydatabase"); co

HikariCP版本:2.6.1
JDK版本:1.8.0_111
数据库:MySQL
驱动程序版本:5.1.6


这是我的代码:

HikariConfig config = new HikariConfig();
config.setDataSourceClassName("com.mysql.jdbc.jdbc2.optional.MysqlDataSource");
config.setJdbcUrl("jdbc:mysql://localhost:3306/mydatabase");
config.setUsername("root");
config.setPassword("root");
config.addDataSourceProperty("cachePrepStmts", "true");
config.addDataSourceProperty("prepStmtCacheSize", "250");
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
System.out.println("Hikari datasource: " + config.getDataSource());

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/mydatabase?"
        + "user=root&password=root");
System.out.println("Conn: " + conn);
String select = "SELECT * FROM users WHERE email = ? AND enable = 'Y'";
PreparedStatement ps = conn.prepareStatement(select);
ps.setString(1, "myemail@gmail.com");
ResultSet rs = ps.executeQuery();
System.out.println(rs.next());
System.out.println(“Hikari数据源:+config.getDataSource())
返回null和行
System.out.println(rs.next())返回true

换句话说,Hikari连接由于某种原因无法正常工作。我还可以使用Wildfly数据源进行连接


有什么想法吗?

方法
HikariConfig.getDataSource()
并不像您想象的那样。它不向您提供Hikari
数据源
,而是返回您自己设置的(非池)数据源(如果有);您在代码中没有执行这些操作,因此它返回
null

如合同规定:

数据源

此属性仅通过编程配置或IoC容器可用。此属性允许您直接将
DataSource
的实例设置为由池包装,而不是让HikariCP通过反射构造它。这在某些依赖项注入框架中很有用。指定此属性时,将忽略
数据源ClassName
属性和所有特定于数据源的属性。默认值:无

要创建Hikari数据源,您需要使用:

HikariDataSource ds = new HikariDataSource(config);
然后您应该而不是使用
DriverManager
来获取连接,而是使用数据源:

ds.getConnection()
另见

另外:确保您正确地关闭了连接(这将返回到池的连接),您当前的代码不会这样做。最简单的方法(在Java 7或更高版本中)是使用try with resources:

try (Connection conn = ds.getConnection()) {
    // use conn...
}
// conn will have been automatically closed (returned to the pool)

嗨,马克,谢谢你抽出时间。你的解决方案很有效。为了注册一个注释,我还必须添加
config.addDataSourceProperty(“databaseName”,“mydatabase”)可以连接到数据库,否则我将得到<代码>没有选择的数据库异常< /代码>…@ Leand RooBrtoLototo,我不希望如果您在URL中指定了数据库,但我通常不使用MySQL,但是如果您使用驱动程序5.1.6,您可能需要考虑更新(5.1.6是9年以上),最新版本是5.1.42