Как использовать HikariCP с MySql JDBC
Я пытаюсь использовать пул соединений HikariCP JDBC в своем приложении Java. Я не использую никаких фреймворков, таких как Spring или Hibernate, в моем приложении. В настоящее время я могу подключиться к MySQL DB, используя простой драйвер JDBC, но когда я пытаюсь использовать Hiraki, код не работает. Не могу понять, где я иду не так, даже после инициализации источника данных.
Начальный рабочий код JDBC.
public class Connect extends ErrorCat{
protected Connection connection = null;
//Database user name and password
private String name = "root";
private String pass = "";
//Database URL and JDBC Driver
private String url = "jdbc:mysql://127.0.0.1:3306/fls";
private String driver = "com.mysql.jdbc.Driver";
protected /*static Connection*/void getConnection(){
if (connection == null){
System.out.println("Registering driver....");
try {
//Driver Registration
Class.forName(driver).newInstance();
System.out.println("Driver Registered successfully!!.");
//Initiate a connection
System.out.println("Connecting to database...");
connection = DriverManager.getConnection(url, name, pass);
System.out.println("Connected to database!!!");
} catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
e.printStackTrace();
System.out.println("Couldnt register driver...");
} catch (SQLException e) {
e.printStackTrace();
System.out.println("Couldnt connect to database...");
}
}
//return connection;
}
}
Обновленный код (не работает).
public class Connect extends ErrorCat{
protected Connection connection = null;
protected Connection connection = null;
protected HikariDataSource ds = null;
protected static Connection instance = null;
protected /*static Connection*/void getConnection() {
if (connection == null){
System.out.println("Registering driver....");
Connect ct = new Connect();
ct.HikariGFXDPool();
}
//return connection;
}
protected void HikariGFXDPool(){
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/simpsons");
config.setUsername("bart");
config.setPassword("51mp50n");
config.addDataSourceProperty("cachePrepStmts", "true");
config.addDataSourceProperty("prepStmtCacheSize", "250");
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
HikariDataSource ds = new HikariDataSource(config);
}
}
1 ответ
Я думаю, что реальная проблема заключается в том, что в методе HikariGFXDPool вы создаете локальную переменную и переменную класса protected HikariDataSource ds = null; остаться нулевым Таким образом, вы не можете получить соединение.
Лучший способ - использовать отдельный класс для создания и получения соединений.
что-то вроде этого:
public class DBHandler{
private static HikariDataSource ds;
static{
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/simpsons");
config.setUsername("bart");
config.setPassword("51mp50n");
config.setDriverClassName("com.mysql.jdbc.Driver");
config.addDataSourceProperty("cachePrepStmts", "true");
config.addDataSourceProperty("prepStmtCacheSize", "250");
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
ds = new HikariDataSource(config);
}
public static Connection getConn() throws SQLException {
return ds.getConnection();
}
}
Тогда в вашем другом классе вы получите соединение, используя:
Connection conn = DBHandler.getConn();
// query
conn.close();