0

サーバー上のプレーヤーからの接続をMysqlDBに記録します。IPDataBaseという名前のテーブルがあります。ユーザーが同じIPで複数のアカウントを使用しているかどうかを確認したいと思います。

テーブルは多かれ少なかれそのように見えます:

PlayerName       |    IP

Player1          |    0.0.0.0

Player2          |    0.0.0.1

Player1          |    0.0.0.2

もちろん、非現実的な例を使用します。それで、同じプレイヤー名がそこにある可能性がありますが、IPは異なります。したがって、プレーヤーが接続するとすぐに、同じプレーヤーが同じIPで既にログインしているかどうかを確認します。そうでない場合は、新しい行を挿入します。

同じIPを持つプレーヤーがいるかどうかを返すブールメソッドができました。これまでの私のコードは次のとおりです。

注:Bukkitプラグインの場合、タイプPlayerはPlayerであり、文字列Playernameはplayer.getName()によって取得されます。

public boolean checksameip(Player player, String IP){
    boolean ret = false;
    String playername = player.getName();
    try{
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/WebCom", "root", "MyPW");

        Statement stmt = (Statement) con.createStatement();

        ResultSet rs = stmt.executeQuery("SELECT PlayerName FROM IPDataBase WHERE IP='"+IP+"'");

        if(rs.next()){
        //there are results

            //have no clue what to put here :S

        }else{

            ret = false;
        }

        con.close();

    }catch(Exception e){

        logm("Could Not Send Data To MYSQL DATABASE SERVER");
    }

    return ret;
}
4

2 に答える 2

0

私が理解している限り、同じ IP を共有するすべてのプレイヤーを取得したいですか? 次のようにします。

public String[] getPlayersWithIP(String ip) {
    try{
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/WebCom", "root", "MyPW");
        Statement stmt = (Statement) con.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT PlayerName FROM IPDataBase WHERE IP='"+ip+"'");
        HashSet<String> result = new HashSet<String>();
        int i=0;
        while(rs.next()){
            result.add(getString("PlayerName"));
        }
        con.close();
        return result.toArray(new String[0]);
    }catch(Exception e){
        logm("Could Not Send Data To MYSQL DATABASE SERVER");
        return new String[0];
    }
}

Stringプレイヤーが IP を持つすべての異なるプレイヤー名を含む配列を返しますip。その IP を持つプレイヤーが DB に存在しない場合、または例外がスローされた場合、空の配列が返されます。返された配列のサイズが 1 より大きい場合、同じ IP を持つ複数のユーザーがサーバーにログインしています。

于 2012-06-02T23:01:33.317 に答える
0

DB から返されたプレーヤーの名前と、メソッドで渡されたプレーヤーの名前を比較するのはどうでしょうか。メソッドに渡されたユーザー以外のユーザーがいる場合は、複数の a/c が同じ IP で使用されています。

于 2012-06-02T23:01:47.183 に答える