Как использовать 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();
Другие вопросы по тегам