私がしようとしているのは、ユーザー名とGUIDをSQLiteデータベースに格納することです。新しいプレーヤーがBukkitサーバーに参加すると、サーバーはプレーヤーのユーザー名を取得し、GUIDを生成します。サーバーはこのGUIDを取得し、プレーヤーに確認してもらうことができます。ユーザー名とGUIDがSQLiteデータベースに保存されるようになりました。プレーヤーが未確認のGUIDでサーバーに参加すると、彼は蹴られます。だから私は、GUIDが検証されているかどうかを追跡する方法が必要です。そのため、SQLiteデータベースには 'verified'という名前の整数が含まれています。整数が0の場合、GUIDは未確認です。 1の場合、それは確認されます。 SQLステートメントがいる限り、それはあなたに私のテーブルがどのように見えるかの基本的な理解を与えるよう、正しいかどうかは問題ではありませんSQLiteデータベースから文字列を取得し、変数が等しいかどうかを確認することができません
CREATE TABLE AUTH (USERNAME CHAR(50) PRIMARY KEY NOT NULL, GUID CHAR(36) NOT NULL, VERIFIED INT NOT NULL)
:ここでは次のようにテーブルがどのように見えるかです。
私が経験している問題は、GUIDが未検証/ nullの場合にプレイヤーをキックするコードが原因です。
// Check whether player has a GUID
if (playerDatabase.hasGUID(player)) {
// Check whether GUID is verified
if (playerDatabase.isGUIDVerified(player)) {
// ...
}
}
私はテストのカップルを行なったし、hasGUIDブールは常にfalseを返すことがわかりました。 hasGUIDのコードは次のとおりです
resultSet = statement.executeQuery("SELECT * FROM AUTH;");
while (resultSet.next()) {
if (resultSet.getString("USERNAME").equalsIgnoreCase(player.getName())) {
if (resultSet.getString("GUID") != null) {
statement.close();
return true;
}
}
}
上記のコードはtry/catch文で囲まれています。私がここでやっている間違い?
'たresultSet = statement.executeQueryを( "AUTH SELECT * FROM;");修正'うーん....それは 'WHEREを使用する方が意味がありません'それは、**すべての**を取得し、ループをチェックするよりもむしろ? –
そのコードは機能するように見えます(ステートメントの終了で終わったと仮定し、ループが一致するものを見つけずに終了する場合はfalseを返します)。 'equalsIgnoreCase'は、大文字と小文字を区別しない文字列マッチングでは問題ありません。そして、あなたがnullでない限りGUIDが何であるか気にしないと仮定すると... –
あなたの 'AUTH'テーブル作成ステートメントは' GUID CHAR(36)NOT NULL'と言います。しかし、 'GUID'を取得すると' nullでない 'ことを確認しています。ハァッ?確かに定義上、 'AUTH'に行がある場合、' GUID'はnullではありません。 –