1
public static void updateHistory(Client winner) {
    try {
        if (winner != null) {
            getDatabase().newQuery("INSERT INTO tournaments (`players`, `winner`, `winnerKills`, `map`, `prize`) VALUES ('" + tournyPlayers.size() +"', '" + winner.playerName + "', '" + winner.killCount + "', 'Wilderness', '" + winner.gameScore + "')");
        }
        else {
            getDatabase().newQuery("INSERT INTO tournaments (`players`, `winner`, `winnerKills`, `map`, `prize`) VALUES ('" + tournyPlayers.size() +"', 'None', 'None', 'Wilderness', 'None')");            
        }

        ArrayList<Client> player = tournyPlayers;

        for (int i = 0; i < player.size(); i++) {
            if (player.get(i).killedByPlayer == "") {
                getDatabase().newQuery("INSERT INTO tournament_players (`name`, `kills`, `killedBy`, `score`, `points`) VALUES ('" + player.get(i).playerName + "', '" + player.get(i).killCount + "', 'N/A', '" + player.get(i).gameScore + "', '" + player.get(i).gamePoints + "')");
            }
            else {
                getDatabase().newQuery("INSERT INTO tournament_players (`name`, `kills`, `killedBy`, `score`, `points`) VALUES ('" + player.get(i).playerName + "', '" + player.get(i).killCount + "', '" + player.get(i).killedByPlayer + "', '" + player.get(i).gameScore + "', '" + player.get(i).gamePoints + "')");                
            }
        }

    } catch (SQLException e) {
        e.printStackTrace();
    }       
}

那么我想做的是,插入一个新的锦标赛行,它将显示有关锦标赛的信息,现在我想将玩家添加到锦标赛中(谁在玩它),所以我现在将每个玩家添加到一个新的行,他的数据。

但现在我想确保玩家与我插入的当前锦标赛相匹配。我无法在服务器端制作当前服务器的唯一编号,因为服务器可能会关闭并丢失计数。

因此我考虑使用插入的锦标赛表的 auto_increment ID,并将其与插入的玩家一起添加,因此他的 id 将是锦标赛的自动增量 id。

有没有办法在不使用我插入锦标赛的完全相同的数据的情况下获取自动增量 ID(因为可能有 2 个具有相同状态的锦标赛,谁知道)。

有没有办法这样做?

我正在考虑将带有日期+时间的 MD5 哈希添加到锦标赛行,然后将其添加到玩家行,这是一个好的解决方案吗?

4

1 回答 1

3

看看Statement#getGeneratedKeys()哪个返回 a ResultSet,您可以使用它来检索任何生成的主

ResultSet rsKeys = statement.getGeneratedKeys();
if (rsKeys.next()) {
    tournament.setId(rsKeys.getLong(1));
}

请注意,您需要向 JDBC 驱动程序提示您希望在准备PreparedStatementas时检索生成的密钥

connection.prepareStatement(strSQL, Statement.RETURN_GENERATED_KEYS);

或者,在执行 a Statementas时

statement.executeUpdate(strSQL, Statement.RETURN_GENERATED_KEYS);

参考:
语句#getGeneratedKeys()

检索由于执行此 Statement 对象而创建的任何自动生成的键。如果此 Statement 对象没有生成任何键,则返回一个空的 ResultSet 对象。

于 2013-08-20T14:24:13.590 回答