SQLite - Bukkit插件中的奇怪NPE

时间:2012-12-21 17:10:35

标签: java sqlite minecraft bukkit

我在使用PatPeterSQLite Bukkit plugin“SQLibrary”的基于SQL的Bukkit插件上遇到了一个相当大的错误。我正在尝试使用the first solution from another SO thread确定玩家是否已进入数据库。更多信息可以在this forum thread找到,但我也会在这里给出一个简要的概述。

这是堆栈跟踪:

StackTrace

这是可疑方法,堆栈跟踪中标明的行标记为:

SQLite sqlite; // Set in plugin.onEnable(), which executes before anything
String QUERY_PLAYEREXISTS = "SELECT playername FROM table WHERE playername = ?";
...
public boolean exists(String name) throws SQLException {
    Connection connection = null;
    PreparedStatement statement = null;
    ResultSet resultSet = null;
    boolean exists = false;

    try {
        connection = sqlite.getConnection();
        statement = connection.prepareStatement(QUERY_PLAYEREXISTS); // 109
        statement.setString(1, name.toLowerCase());
        resultSet = statement.executeQuery();
        exists = resultSet.next();
    } finally {
        connection.close();
        statement.close();
        resultSet.close();
    }

    return exists;
}

这里发生了什么?

1 个答案:

答案 0 :(得分:1)

我从未亲自使用SQLite,但我会说您可能错误配置了SQLite设置onEnable(),因为sqlite.getConnection()必须返回null。尝试在第109行之前添加以下代码:

if(connection == null) {
   throw new RuntimeException("SQLite connection is null!");
}

如果在下次运行时遇到RuntimeException,您应该查看SQLite设置。