mybatis バッチアップデートのSQL文は正常だが、SQLの文法が悪い [] エラーが報告される
2022-02-25 23:18:30
マイバイの一括更新を実現するために、Web上では2つほどのアプローチが提供されています。ひとつはsqlのcase構文を使う方法。もう一つは、1つずつ更新していきながら、foreach文でまとめていく方法です。私は後者を使っています。mybatisのステートメントはおおよそ次のようなものです。
<update id="setWeiboEmotionByList" parameterType="java.util.List">
<foreach collection="list" item="item" open="" close="" separator=";">
UPDATE weibo_content
SET
EMOTION = #{item.emotion}
WHERE
WEIBO_ID = #{item.weibo_id}
</foreach>
</update>
セミコロンで区切られた複数の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
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。
関連
-
MYSQL "Access denied; you need (at least one of) SUPER privilege(s) for this operation" 問題解決
-
mysql reports Access denied; you need (at least one of) SUPER privilege(s) for this operation
-
MySQL - エラーです。executeQuery() でデータ操作ステートメントを発行できません。
-
親行が削除または更新できない: 外部キー制約に失敗 解決策
-
unixODBC:データソース名が見つからない、デフォルトドライバが指定されていないに関する質問
-
解決方法 テーブルの定義が正しくありません。自動列は1つだけで、キーとして定義する必要があります。
-
DB2 SQL エラーの解決法。sqlcode=-420, sqlstate=22018
-
PDOデータベース接続エラー。SQLSTATE[HY000] [2002] そのようなファイルやディレクトリはありません。
-
AttributeError: 'function' オブジェクトには 'cursor' という属性がありません。
-
mysql: この操作には (少なくとも 1 つの) RELOAD 権限が必要です。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
2021MySql-8.0.26インストール詳細チュートリアル(ベビーシッターレベル)
-
SocketTimeoutExceptionが発生しました。読み取りがタイムアウトした問題のトラブルシューティング
-
EF Exception Inquiry (エンティティオブジェクトは、IEntityChangeTrackerの複数のインスタンスから参照できません。)...
-
INSERT EXEC文は入れ子にできません。
-
SQL SERVER データベース SELECT INTO および INSERT INTO の使用法(テンポラリテーブルへのデータ挿入を含む)
-
01. プロシージャの結果セットを持つ一時テーブルへのSELECT INTO
-
[Mac] sudo mongod コマンド、プロンプトコマンドが見つかりません。
-
ORA-06550 "の解決策。1 行目、7 列目"
-
ORA-30926: ソース・テーブルの安定した行のセットを取得できませんか?
-
アプリケーションから DB2 SQL Error が報告され続けます。SQLCODE=-302, SQLSTATE=22001, SQLERRMC=null, DRIVER=4.17.29