なんだかGoodVibes

日々の勉強メモです。

【Node】SQLiteを使ってみる

こんにちは。
本日は、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



以上です。