0

我在 Mysql DB 的服务器上记录来自玩家的连接,有一个名为 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 的玩家或抛出异常,则返回一个空数组。如果返回数组的大小大于 1,则两个或更多具有相同 IP 的人登录到您的服务器。

于 2012-06-02T23:01:33.317 回答
0

将数据库返回的玩家名称与传入方法的玩家名称进行比较呢?如果除了传递给方法的用户之外还有其他用户,则多个 a/c 已与相同的 IP 一起使用。

于 2012-06-02T23:01:47.183 回答