こんにちは。
本日は、NodeでSQLiteを使ってみます。
概要
今回は、メモリ上にデータベースを作成して操作してみます。
作成するテーブルは以下。
id | name |
---|---|
1 | Bob |
2 | Kevin |
準備
以下のコマンドでSQLite3をインストールしてください。
$ npm install sqlite3
私の環境では、上記のコマンドがうまくいきませんでした…
私の場合は、xcode-selectを入れ直すことで解決しました。
以下、実行したコマンドです。
$ sudo rm -rf $(xcode-select -print-path) $ xcode-select --install
サンプルソース
NodeでSQLiteを操作する場合、以下のようにします。
var sqlite3 = require('sqlite3').verbose(); // データベースを作成する var db = new sqlite3.Database(':memory:'); // SQLの実行 db.serialize(() => { // SQLを記載する }); db.close();
テーブルを作成する
テーブル作成は以下です。
var sqlite3 = require('sqlite3').verbose(); var db = new sqlite3.Database(':memory:'); db.serialize(() => { // テーブルの作成 db.run('CREATE TABLE testdb (id INTEGER, name TEXT)'); }); db.close();
カラムを追加する
var sqlite3 = require('sqlite3').verbose(); var db = new sqlite3.Database(':memory:'); db.serialize(() => { db.run('CREATE TABLE testdb (id INTEGER, name TEXT)'); // カラムの追加 var insertData = db.prepare('INSERT INTO testdb VALUES (?, ?)'); insertData.run([1, 'Bob']); insertData.run([2, 'Kevin']); // prepareオブジェクトを閉じる insertData.finalize(); }); db.close();
では、次から実際にレコードをSELECTしてみます。
結果を1レコードだけ取得
var sqlite3 = require('sqlite3').verbose(); var db = new sqlite3.Database(':memory:'); db.serialize(() => { db.run('CREATE TABLE testdb (id INTEGER, name TEXT)'); var insertData = db.prepare('INSERT INTO testdb VALUES (?, ?)'); insertData.run([1, 'Bob']); insertData.run([2, 'Kevin']); insertData.finalize(); // 結果を取得 db.get('SELECT * FROM testdb', (err, row) => { if (err) { console.error(err.message); } console.log(`${row.id} : ${row.name}`); }); }); // データベースを閉じる db.close();
結果は以下です。
1 : Bob
全ての結果を1度に取得する
var sqlite3 = require('sqlite3').verbose(); var db = new sqlite3.Database(':memory:'); db.serialize(() => { db.run('CREATE TABLE testdb (id INTEGER, name TEXT)'); var insertData = db.prepare('INSERT INTO testdb VALUES (?, ?)'); insertData.run([1, 'Bob']); insertData.run([2, 'Kevin']); insertData.finalize(); // 結果を取得 db.all('SELECT * FROM testdb', (err, rows) => { if (err) { console.error(err.message); } rows.forEach(row => { console.log(`${row.id} : ${row.name}`); }); }); }); db.close();
結果は以下です。
1 : Bob 2 : Kevin
全ての結果を順番に取得する
var sqlite3 = require('sqlite3').verbose(); var db = new sqlite3.Database(':memory:'); db.serialize(() => { db.run('CREATE TABLE testdb (id INTEGER, name TEXT)'); var insertData = db.prepare('INSERT INTO testdb VALUES (?, ?)'); insertData.run([1, 'Bob']); insertData.run([2, 'Kevin']); insertData.finalize(); // 結果を取得 db.each('SELECT * FROM testdb', (err, row) => { if (err) { console.error(err.message); } console.log(`${row.id} : ${row.name}`); }); }); db.close();
結果は以下です。
1 : Bob 2 : Kevin
以上です。