Java MySQL连接没有';我不能和HikariCP一起工作
HikariCP版本:2.6.1Java 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
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