1

PatPeterSQLiteBukkitプラグイン「SQLibrary」を使用するSQLベースのBukkitプラグインでかなり大きなバグに遭遇しています。別のSOスレッドからの最初のソリューションを使用して、プレーヤーがすでにデータベースに入力されているかどうかを判断しようとしています。詳細については、このフォーラムスレッドを参照してください。ただし、ここでも簡単な概要を説明します。

これはスタックトレースです。

スタックトレース

そして、これが疑わしいメソッドであり、スタックトレースに示されている行がマークされています。

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

何が起きてる?

4

1 に答える 1

1

私は個人的にSQLiteを使用したことはありませんが、SQLiteのセットアップを誤って構成した可能性があります。これは、を返す必要があるonEnable()ためです。109行目の前に次のコードを追加してみてください。sqlite.getConnection()null

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

次に実行するときにRuntimeExceptionが発生した場合は、SQLiteの設定を調べる必要があります。

于 2013-01-03T19:07:23.573 に答える