Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

node.jsでSQLite3を使う

SQLは使いたいけど、身内用だから軽いのでいい!」て場合はSQLiteですね。
軽いし、RasberryPiみたいなのに突っ込むのもそれ程苦労しません。
今回は、SQLiteをnode.jsで動かす方法を扱います。

実際のところ

導入

あらかじめsqlite3の環境を整えたうえで、

$ npm install -g sqlite3

ま、そのまんまですね。

スクリプト本体

テキスト型と数値型の2つのカラムを持つシンプルなデータを、
dataフォルダのlocal.sqlite3に生成する
といったスクリプトだと、以下のようになります。

var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database('./data/locals.sqlite3');

db.serialize(function() {
    db.run("CREATE TABLE tbl (info TEXT, val INT)");

    var stmt = db.prepare("INSERT INTO tbl (info, val) VALUES (?, ?)");
    for (var i = 0; i < 10; i++) {
	stmt.run(['DATA', i]);
    }
    stmt.finalize();

    db.each("SELECT rowid AS id, info, val FROM tbl", function(err, row) {
	console.log(row.id + ": " + row.info + " is " + row.val);
    });
});

db.close();

実行すると、以下のように出ます。

$ node sqlite3.js 
1: DATA is 0
2: DATA is 1
3: DATA is 2
4: DATA is 3
5: DATA is 4
6: DATA is 5
7: DATA is 6
8: DATA is 7
9: DATA is 8
10: DATA is 9

prepareはSQLの一部組み立てを手伝ってくれるメソッド

例文に出てくるprepare関数は、SQL文の一部組み立てを手伝ってくれるメソッドです。
"?"で指定した部分に、node側で生成した値をぶち込みます。
毎度毎度文字列作って都度渡すより、可視性が高くなって良いですね。

Database#prepare(sql, [param, ...], [callback])

Prepares the SQL statement and optionally binds the specified parameters and calls the callback when done. The function returns a Statement object.

When preparing was successful, the first and only argument to the callback is null, otherwise it is the error object. When bind parameters are supplied, they are bound to the prepared statement before calling the callback.