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

読み込みクエリを次のように変更することで、この問題を修正しました。SELECT * FROM player as p, playerdata as pd WHERE p.username = '" + name + "' AND pd.username = '" + name + "'

于 2012-06-12T15:57:16.047 に答える
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 に答える