新しいことにはウェルカム

技術 | 電子工作 | ガジェット | ゲーム のメモ書き

JavaScriptでSQLiteを使う方法メモ

JavaScriptでSQLiteを使う方法メモです。

あまり凝ったことはせず、必要最低限の機能に絞ってまとめました。

SQLiteそのものの使い方は割愛しますが、こちらが詳しいのでご参照ください。

インストール

パッケージ「sqlite3」を使いました。

npm install sqlite3

SQLiteのバイナリーもインストールされるので、SQLiteのインストールは不要なのですが、SQLiteのコマンドラインツールがあると何かと便利なので、別途SQLiteをインストールしておいた方がいいですね。

ドキュメント

パッケージのGithubページに「API documentation」のリンクがあるので、そこで詳しい情報を取得できます。

サンプル

import * as sqlite3 from 'sqlite3';
import * as util from 'util';

(async () => {
    try {
        const db = new sqlite3.Database('db.sqlite3');

        db.on('trace', (sql) => {
            console.log(sql);
        });

        await util.promisify(db.all).bind(db)(
            `INSERT INTO user_table VALUES(?, ?)`,
            [0, 'TEST']
        );

        const rows = await util.promisify(db.all).bind(db)(
            `SELECT * FROM user_table`
        );

        rows.forEach((v: any) => console.log(v));

        await util.promisify(db.close).bind(db)();

    } catch (err) {
        console.error(err);
    }
})();

説明

同期実行

クエリ結果はコールバックで呼び出される、非同期スタイルのライブラリです。

同期実行するための関数が用意されているのですが、それは使わず、コールバックをPromise化して、async/awaitを使って同期実行させています。

コールバックのPromise化にはutil.promisify()を使っています。その際、bind()thisdbにバインドしておく必要があります。

クエリ実行

クエリを実行する関数はいくつかあるのですが、Database.all()で大抵はまかなえます。

Database.all()は実行結果が配列(rows)で返ってきます。INSERTなど、実行結果の配列を必要としない場合は戻り値を無視します。

1番目の引数にクエリを指定し、2番目の引数にクエリに埋め込む変数値の配列を指定します。すると、クエリの「?」の箇所に、変数値が展開されます。

クエリに直接変数値を書き込むこともできなくはないのですが、埋め込み機能を使えばエスケープ処理もよしなにやってくれるので、絶対に使った方がいいです。

デバッグ

変数を展開した後の実際のクエリを見るには、Database.on('trace')イベントを登録して、クエリが作成された時点でクエリをコンソール表示するようにしておきます。

関連カテゴリー(JavaScript)記事

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com

www.kwbtblog.com