1
public boolean setgame(int botid, int gameid, String name, String ip, int spoofed, int reserved, int loadingtime, int left, String leftreason, int team, int colour, String spoofedrealm) {
    try {
        Connection connection = connection();
        PreparedStatement statement = connection.prepareStatement("INSERT INTO gameplayers (id, botid, gameid, name, ip, spoofed, reserved, loadingtime, left, leftreason, team, colour, spoofedrealm) VALUES (NULL, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
        statement.setInt(1, botid);
        statement.setInt(2, gameid);
        statement.setString(3, name);
        statement.setString(4, ip);
        statement.setInt(5, spoofed);
        statement.setInt(6, reserved);
        statement.setInt(7, loadingtime);
        statement.setInt(8, left);
        statement.setString(9, leftreason);
        statement.setInt(10, team);
        statement.setInt(11, colour);
        statement.setString(12, spoofedrealm);
        statement.execute();
        connectionReady(connection);
        return true;
    } catch (SQLException e) {
        if (Main.DEBUG) {
        }
        Main.println("[SQLThread] Unable to add bot ban to MySQL database: " + e.getLocalizedMessage());
    }
    return false;
}

insertすべてのデータを追加するメイン メソッドを作成しましたが、ステートメントにエラーが表示されません。

このエラーが発生しています:

[SQLThread] Fail: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'left, leftreason, team, colour, spoofedrealm) VALUES (NULL, 2, 146, 'Teste', '120.32' at line 1
4

2 に答える 2

1

LEFTは MySQL の予約語です。あなたはそれをエスケープする必要があります:

INSERT INTO gameplayers (
     id, botid, gameid, name, ip, spoofed, reserved, loadingtime, `left`, ...
                                                        ----------^----^
于 2013-02-27T02:54:56.967 に答える
1

LEFTMySql の予約語です(のようにLEFT OUTER JOIN...)。識別子として使用するには、引用符で囲む必要があります。

さらに良いことに、予約語を識別子として使用しないようにフィールドの名前を変更することを検討してください。

于 2013-02-27T02:55:04.403 に答える