sqlite3
の公式マニュアルは↓
Home · mapbox/node-sqlite3 Wiki
以下コマンドで sqlite3
をインストール。
今回は次の処理を行うプログラムを書いた。
- テーブル
pages
に introduction
カラムを追加する。
- テーブル
pages
の public
が1である全てのレコードについて、content
カラムの値を ---
で分割し、前半を introduction
カラムに、後半を content
カラムにセットしてUPDATEする。
なお、ここでは content
に ---
が含まれなかったり複数含まれていたりはしないものとする。
以下スクリプト。
特にロールバック書いてないのは、コミットしなければロールバックされるから。
備考
db.serialize()
のコールバック直下に書いた操作は同期的に実行されるけど、あくまで直下に書いたものしかシリアライズされない。つまり↑のプログラムだと、db.each()
のコールバック内に書いたUPDATE文はシリアライズされない。
そのせいか db.close()
を db.serialize()
の外に書いたら Error: SQLITE_MISUSE: Database handle is closed
エラーが出た。たぶん、シリアライズされたクエリが終了した時点でデータベースが閉じられてしまい、UPDATE実行時にコケたんだと思う。
よって、db.each()
の処理が全て完了してからデータベースを閉じてもらうために、ここでは db.each()
の最後の引数のコールバック内で db.close()
した。
もっと複雑な処理を書くなら、db.serialize()
をネストさせたりしなきゃいけないと思う。ここらへんはマニュアルでちょっと触れられていた。
Control Flow · mapbox/node-sqlite3 Wiki