Java 如何在MySql JDBC中使用HikariCP

Java 如何在MySql JDBC中使用HikariCP,java,mysql,jdbc,connection-pooling,hikaricp,Java,Mysql,Jdbc,Connection Pooling,Hikaricp,我正在尝试在Java应用程序中使用HikariCP JDBC连接池。我的应用程序中没有使用任何类似Spring或Hibernate的框架。目前,我可以使用简单的JDBC驱动程序连接到MySQL数据库,但当我尝试使用Hiraki时,代码不起作用。即使在初始化数据源之后,也无法理解哪里出了问题 初始JDBC工作代码.. public class Connect extends ErrorCat{ protected Connection connection = null; //

我正在尝试在Java应用程序中使用HikariCP JDBC连接池。我的应用程序中没有使用任何类似Spring或Hibernate的框架。目前,我可以使用简单的JDBC驱动程序连接到MySQL数据库,但当我尝试使用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);
    }
}
更新的代码(不工作)

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);
    }
}

我认为真正的问题在于,在方法HikariGFXDPool中,您创建了一个局部变量,而类变量受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();

有什么问题?你能给问题添加堆栈跟踪吗?你需要添加config.setdrivercassname(“com.mysql.jdbc.Driver”);即使在添加驱动程序并在try-catch中打印堆栈跟踪之后,我也没有收到任何错误。应用程序运行正常,但未显示Mysql数据..最后一行
HikariDataSource ds=new HikariDataSource(config)创建局部变量。也许您想使用已声明的受保护的
ds
变量?您永远不会创建连接。您只是创建了一个连接池来立即丢弃它。
连接
永远都是
null
以外的任何东西。这是如何解决问题的?这个答案解决了这个问题,因为我认为真正的问题是,在方法HikariGFXDPool中,他创建了一个局部变量,类变量受保护HikariDataSource ds=null;保持为空。所以他无法获得连接。我可以更新我的答案以确保这个概念是的,我认为指出问题并解释代码如何解决这个问题将非常有帮助。