mybatis一括更新時sql文は問題ないがbad SQL grammar[]エラーを報告

3210 ワード

ネット上ではmybaitisの一括更新の実現に約2つの方法が提供されている.1つはsqlを用いたcase構文である.もう1つは、毎回1つしか更新されませんがforeach文で組み立てられています.私が使っているのは2つ目です.mybatisの文は大体次の通りです.
"setWeiboEmotionByList" parameterType="java.util.List">
        "list" item="item" open="" close="" separator=";">
            UPDATE weibo_content
            SET
                EMOTION = #{item.emotion}
            WHERE
                WEIBO_ID = #{item.weibo_id}
        
    

一度に複数のsql文が更新され、各文はセミコロンで区切られます.以上mybatisからsqlに翻訳すると、大体次のようになります.
UPDATE weibo_content
SET
   EMOTION = 1
WHERE
   WEIBO_ID = 1;
UPDATE weibo_content
SET
   EMOTION = 0
WHERE
   WEIBO_ID = 2;   

しかし、テストを行うたびに、データベースを更新するたびに次のようなエラーが発生します.
Cause: 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 'UPDATE weibo_content
            SET
                EMOTION = 0.0
            W' at line 7
; bad SQL grammar []; nested exception is 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 'UPDATE weibo_content

しかし、sql文をnavicatに単独で置くことは成功したが、データベースに接続するときにallowMultiQueries=trueという文が少なくなったことが分かった.この文では、複数のsql文を一度にコミットできます.特にセミコロン;完全なデータベース接続urlは、jdbc:mysql://localhost:3306/zkw_web?useUnicode=true&characterEncoding=utf8 &allowMultiQueries=true