0

Java の sql に対して次の準備済みステートメントがあります。

com.mysql.jdbc.JDBC4PreparedStatement@6e56103e:

INSERT INTO `game` (Id , GameStart ,Name, Lenght, MapVersion, Mode)VALUES(2502591,'2000-03-02 02:02:02','5x5 aptb wdw','00:55:48','DotA v6.75b.w3x','aptb ')ON DUPLICATE KEY UPDATE `Id`=VALUES(Id),`GameStart` = VALUES(GameStart),`Name`=VALUES(Name),`Lenght`=VALUES(Lenght),`MapVersion`=VALUES(MapVersion),`Mode`=VALUES(Mode).

Eclipse で実行すると、次のエラーが発生します。

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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 '?,?,?,?,?,?)ON DUPLICATE KEY UPDATE `Id`=VALUES(Id),`GameStart` = VALUES(GameSta' at line 1.

しかし、同時に SQLyog で同じクエリを実行しても、エラーは発生しません。行が更新されます。何が問題になる可能性がありますか?前もって感謝します

コード:

  Class.forName("com.mysql.jdbc.Driver");
    Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/dota","root","root");
    PreparedStatement updateGame = null;
    String updatingGame = "INSERT INTO `game` (Id , GameStart ,Name, Lenght, MapVersion, Mode)" +
                "VALUES(?,?,?,?,?,?)" +
                "ON DUPLICATE KEY UPDATE " +
                "`Id`=VALUES(Id),"+
                "`GameStart` = VALUES(GameStart)," +
                "`Name`=VALUES(Name)," +
                "`Lenght`=VALUES(Lenght)," +
                "`MapVersion`=VALUES(MapVersion)," +
                "`Mode`=VALUES(Mode)";
    con.setAutoCommit(false);
    updateGame=con.prepareStatement(updatingGame);
                updateGame.setInt(1, game.Id);
                Timestamp timestamp = new Timestamp(100,2,2,2,2,2,2);
                updateGame.setTimestamp(2,timestamp);
                updateGame.setString(3, game.GameName);
                updateGame.setTime(4, (Time) game.Time);
                updateGame.setString(5, game.MapVersion);
                updateGame.setString(6, game.Mode);
                updateGame.executeUpdate(updatingGame);

そして上:

updateGame.executeUpdate(updatingGame);

エラーが発生する

4

3 に答える 3

0

私の間違いを見つけました。executeUpdate();の代わりにのみ使用する必要がありexecuteUpdate(updatingGame)ます。パラメーターで使用すると、値が白く上書きされるためです。

updateGame.setInt(1, game.Id);
Timestamp timestamp = new Timestamp(100,2,2,2,2,2,2);
updateGame.setTimestamp(2,timestamp);
updateGame.setString(3, game.GameName);
updateGame.setTime(4, (Time) game.Time);
updateGame.setString(5, game.MapVersion);
updateGame.setString(6, game.Mode);
于 2012-11-03T20:26:01.230 に答える
0

まず、を使用しているpreparedStatement場合は、この方法で行う必要があります

String query="Insert into tablename (col1, col2) values(?,?)";
PreparedStatement stmnt = //get the statement
stmnt.setString(1, "col1val");
stmnt.setString(2, "col2val");
于 2012-10-31T20:01:24.247 に答える
0

主キーに重複する値を挿入しています。

@chaitanya10 の提案に従い、使用してくださいPreparedStatement

オブジェクト指向についての知識はどうですか? ご覧のとおり、カプセル化を正しく使用していません。

于 2012-10-31T20:05:57.313 に答える