1

我正在尝试使用 MySQL 数据库来保存玩家信息,但只要有重复,它就会加载(或保存?)来自同一玩家列的每个玩家。

这是我正在使用的:

public boolean saveGame(String playerName, String playerPass) {
    String player = "'" + playerName + "', '" + playerPass + "'";
    String player2 = "`password` = '" + playerPass + "'";

    String playerData = "'" + playerName + "', 'testtttt'";
    String playerData2 = "`test` = 'testtttt'";

    Server.getConnectionPool().executeUpdate("INSERT INTO player (username, password) VALUES (" + player + ") ON duplicate KEY UPDATE " + player2);
    Server.getConnectionPool().executeUpdate("INSERT INTO playerdata (username, test) VALUES (" + playerData + ") ON duplicate KEY UPDATE " + playerData2);
    return true;
}

public int loadGame(String name, String pass) {
    ResultSet res = Server.getConnectionPool().executeQuery("SELECT * FROM player, playerdata WHERE player.username = '" + name + "'");
    try {
        name = res.getString("username");
        if (!pass.equalsIgnoreCase(res.getString("password"))) {
            return 3;
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return 1;
}

这是模式(我从示例中删除了数据,因为它并不是真正需要的,无论如何它都不能正确加载/保存):

播放器: 图片 http://puu.sh/Alit.png

玩家数据: 图片 http://puu.sh/Aljr.png

我知道它们将是相同的,因为我对该test字段使用相同的字符串,但即使我在 PHPMyAdmin 中进行随机字符串或自定义编辑,它仍然会保存然后从同一列加载。我认为它正在保存,因为它似乎正确加载了播放器,它只是没有更新正确的列,我不知道该怎么做。在playerdata表格中,每个人的所有数据都是相同的,我不知道是什么原因造成的,有什么想法吗?

4

2 回答 2

0

如果要在数据库中插入重复记录,请从两个表中删除主键(用户名)。不想插入重复记录,请使用 JDBC 事务。以下是示例用法;

       Server.getConnectionPool().setAutoCommit(false);
       Server.getConnectionPool().executeUpdate("INSERT INTO player (username, password) VALUES (" + player + ") ON duplicate KEY UPDATE " + player2);
       Server.getConnectionPool().executeUpdate("INSERT INTO playerdata (username, test) VALUES (" + playerData + ") ON duplicate KEY UPDATE " + playerData2);
       Server.getConnectionPool().commit();

详细用法可以在这里学习。

于 2012-06-12T04:00:43.000 回答
0

我已通过将加载查询更改为SELECT * FROM player as p, playerdata as pd WHERE p.username = '" + name + "' AND pd.username = '" + name + "'

于 2012-06-12T15:57:16.047 回答