java - HikariCP 的 NullPointerException

标签 java hikaricp

启动应用程序时出现以下错误:

java.lang.NullPointerException
        at me.MyApp.MyApp.Database.getConn(Database.java:30) ~[?:?]
        at me.MyApp.MyApp.Models.MyAppModel.<init>(MyAppModel.java:18) ~[?:?]

以下是我设置数据库类的方法:

public class Database {
    private static MyApp instance = MyApp.getInstance();
    private static Config config = new Config();


private static HikariDataSource ds = new HikariDataSource();

static {

    HikariConfig dbConfig = new HikariConfig();
    dbConfig.setJdbcUrl("jdbc:mysql://localhost:3306/" + config.get("database.database"));
    dbConfig.setUsername(config.get("database.username"));
    dbConfig.setPassword(config.get("database.password"));
    dbConfig.setDriverClassName("com.mysql.jdbc.Driver");
    dbConfig.addDataSourceProperty("cachePrepStmts", "true");
    dbConfig.addDataSourceProperty("prepStmtCacheSize", "250");
        dbConfig.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");

}

    public static Connection getConn() {
        try {
            return ds.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

}

这是我的模型类,它触发了错误:

public class MyAppModel {

    private MyApp instance = MyApp.getInstance();
    private Connection connection;


    public MyAppModel() {
        connection = Database.getConn();
    }

    public void createTable() {
        BukkitRunnable r = new BukkitRunnable() {
            @Override
            public void run() {
                try {
                    String sql = "CREATE TABLE IF NOT EXISTS `myapp` ( " +
                            " `id` INT NOT NULL AUTO_INCREMENT ," +
                            "`uuid` VARCHAR(255) NOT NULL ," +
                            " `join_message` VARCHAR(255) NOT NULL ," +
                            " `quit_message` VARCHAR(255) NOT NULL ," +
                            " `change_points` INT NOT NULL," +
                            " `last_modified` TIMESTAMP NOT NULL," +
                            " PRIMARY KEY (`id`)" +
                            ")";
                    Statement statement = connection.createStatement();
                    statement.executeUpdate(sql);
                } catch(SQLException e) {
                    e.printStackTrace();
                }
            }
        };

        r.runTaskAsynchronously(instance);
    }
}

我认为 MyAppModel 连接返回 null,并且我正在错误地处理 TryCatch,但我不完全确定它为什么返回 null。我究竟做错了什么?

我理解 NullPointerException 的概念,但不明白为什么我的应用程序会出现此错误。

最佳答案

在 getConn() 函数中,您调用 ds.getConnection() 但变量 ds 从未在您的类中创建。确保初始化名为 ds 的 HikariDataSource 对象。

抱歉,我对正在使用的对象感到困惑,因此将 dbConfig 更改回您所拥有的内容,然后根据 javadocs 使用其构造函数创建新的 HikariDataSource 对象 -> HikariDataSource(HikariConfig 配置)

因此,您需要切换对象的初始化并在 HikariDataSource 对象的构造函数中使用 dbConfig 对象。

private static HikariConfig dbConfig;
static { //keep this the same
    dbConfig = new HikariConfig();
    dbConfig.setJdbcUrl("jdbc:mysql://localhost:3306/" + config.get("database.database"));
    dbConfig.setUsername(config.get("database.username"));
    dbConfig.setPassword(config.get("database.password"));
    dbConfig.setDriverClassName("com.mysql.jdbc.Driver");
    dbConfig.addDataSourceProperty("cachePrepStmts", "true");
    dbConfig.addDataSourceProperty("prepStmtCacheSize", "250");
    dbConfig.addDataSourceProperty( "prepStmtCacheSqlLimit", "2048");
}

private static HikariDataSource ds = new HikariDataSource(dbConfig); //intialize here with your newly created HikariConfig object

关于java - HikariCP 的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44440180/

相关文章:

java - JComboBox 警告阻止在 Eclipse 中打开设计页面

java - 强制 JUnit 显示未捕获的异常堆栈跟踪

java - Spring:如何使用注释配置 Messaging Bridge 轮询器

java - 为线程和数据库连接提供更多调试见解

hikaricp - HikariPool-1 - 连接不可用(Camunda)

java - 继承类的 ClasscastException

java - Spring boot、hibernate、hikariCP 和 mysql 不活动后无通信

java - 如何在tomcat中生成包级日志

java - 如何使用 Hibernate、HikariCP 和 persistence.xml 实现 Spring 的 @Transactional Annotation

java - 在 jtextfield 中验证 'price' 的正则表达式是什么