概要
Node.jsにて書籍情報を管理するデータベースをSQLite3にて取り扱っており、書籍一覧のテーブル「books」内に書籍1冊ごとに1つのレコードが割り当てられています。
レコードが重複しているかどうかはカラム「ID」で管理しています。
実現したいこと
「重複する書籍レコードがあればそのレコードを更新し、重複する書籍レコードが無ければ新規レコードを作成する」機能を作成していますが、新規作成のコードをうまく動作させることが出来ず困っています。
試したこと
更新するコードは下記のように記述して正しく動作しました。更新のための情報は配列「items[]」に入っています。
JavaScript
1 db.serialize(()=>{ 2 // 1 既にテーブルにカラム「ID」がある場合、レコードを更新する 3 const up_data = db.prepare('UPDATE books SET RELEASE = ?, TITLE = ?, PRICE = ?, URL = ?, IMAGE_URL = ? WHERE ID = ?'); 4 up_data.run( 5 //更新される情報 6 items['ReleaseDate'],//発売日の更新 7 items['Title'],//書籍名の更新 8 items['Price'],//価格の更新 9 items['URL'], //URLの更新 10 items['imageURL'],//画像のURLの更新 11 //検索用の要素 12 items['ID'],//IDの一致 13 ); 14 up_data.finalize();//Prepareオブジェクトを閉じる 15 });
一方で、IDの不一致を確認して新規レコードを追加する下記コードはエラーが出ており、動作しない状況です。
JavaScript
1 db.serialize(()=>{ 2 const in_data = db.prepare('INSERT INTO books VALUES(?,?,?,?,?) WHERE NOT EXISTS ( SELECT * FROM books WHERE ID = (?)'); 3 in_data.run( 4 //挿入される情報 5 items['ReleaseDate'],//発売日の更新 6 items['Title'],//書籍名の更新 7 items['Price'], //PRICEの更新 8 items['URL'], //URLの更新 9 items['imageURL'],//画像のURLの更新 10 //検索用の要素 11 items['ID'],//IDの不一致 12 ); 13 } 14 in_data.finalize();//Prepareオブジェクトを閉じる 15 });
#エラー内容
エラー内容は下記の通りです。"WHERE"の近くに構文ミスがあるとのことで、サイト等を参考に構文を修正して試してみましたが一向にエラーが無くならず、情報も少ないため質問させて頂きました。
undefined:0 [Error: SQLITE_ERROR: near "WHERE": syntax error Emitted 'error' event on Statement instance at: ] { errno: 1, code: 'SQLITE_ERROR' }
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/15 03:26
2020/11/15 05:46