我在使用PatPeter的SQLite Bukkit plugin“SQLibrary”的基于SQL的Bukkit插件上遇到了一个相当大的错误。我正在尝试使用the first solution from another SO thread确定玩家是否已进入数据库。更多信息可以在this forum thread找到,但我也会在这里给出一个简要的概述。
这是堆栈跟踪:
这是可疑方法,堆栈跟踪中标明的行标记为:
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;
}
这里发生了什么?
答案 0 :(得分:1)
我从未亲自使用SQLite,但我会说您可能错误配置了SQLite设置onEnable()
,因为sqlite.getConnection()
必须返回null
。尝试在第109行之前添加以下代码:
if(connection == null) {
throw new RuntimeException("SQLite connection is null!");
}
如果在下次运行时遇到RuntimeException,您应该查看SQLite设置。