1

batchUpdate()テーブルに複数のレコードを挿入するために使用しています。要件に従って、挿入中に主キーに重複する値がある場合、最新の受信データで更新する必要があるためON DUPLICATE KEY UPDATEINSERTステートメントで使用しようとしていました。単一のON DUPLICATE KEY UPDATE挿入を使用するとうまく機能しますがbatchupdate()、同じクエリを使用するとエラーが発生します。エラーは次のとおりです。

テストケース: testVehicleTracking(com.em.ert.test.TrackingServiceTest): PreparedStatementCallback のエラーが発生しました。悪い SQL 文法 [INSERT INTO test_tracking (sino, material_id, material_type, vehicle_position, rundown_num, msg_type, msg_status, msg_timestamp) VALUES(?, ?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE]; ネストされた例外は java.sql.BatchUpdateException です: SQL 構文にエラーがあります。1 行目の near '' を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

ON DUPLICATE KEY UPDATEbatchupdate() で動作しない理由がわかりません。私が見る限り、作業に違いは何もないので、理想的にはそうあるべきです。

これを達成するために私は何をすべきですか?

4

1 に答える 1

2

ON DUPLICATE KEY UPDATE 句の後に列の割り当てがありません。

MySQLマニュアルから:

13.2.5. INSERT 構文

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name [(col_name,...)]
    {VALUES | VALUE} ({expr | DEFAULT},...),(...),...
    [ ON DUPLICATE KEY UPDATE
      col_name=expr
        [, col_name=expr] ... ]

13.2.5. INSERT 構文
13.2.5.3. INSERT ... ON DUPLICATE KEY UPDATE 構文

于 2013-01-02T16:55:54.790 に答える