RSS

Node.js: Node.js で SQLite3 を使う。

05 4月

準備

Node.js から SQLite3 のデータベースにアクセスするには、sqlite3 モジュールをインストールする必要がある。

 $ npm install sqlite3

使用手順

sqlite3 モジュールをロードし、データベースオブジェクトを得るには次のような手順が必要である。

const sqlite3 = require('sqlite3');
let db = new sqlite3.Database(':memory:', (err) => {
  if (err) {
    return console.error(err.message);
  }
// db を使用してクエリーを行う。
....
});

よく使うメソッド

db オブジェクトでよく使いそうなメソッドには次のようなものがある。

  • run: INSERT文のような非SELECTクエリーを行う。
  • all: SELECT 文を実行して結果を行のリストとして返す。行は辞書形式である。
  • get: 1 行の結果を返すような SELECT 文を実行し、その 1 行を取得する。行は辞書形式である。
  • each: SELECT 文を実行して取得した行ごとに指定した関数をコールする。(all では非常に多くの行数になる場合に使用する)
  • serialize: run メソッドを順番に実行する。(run メソッドはコールバックを使うので、順番に実行するためにはコールバックのネストが深くなるため)
  • close: データベースの接続を閉じる。

サンプル

run メソッド

// メモリ上のデータベースを作成する。(db.run())
const sqlite3 = require('sqlite3');
let db = new sqlite3.Database(':memory:', (err) => {
  if (err) {
    return console.error(err.message);
  }
  console.log('Connected to the in-memory SQlite database.');
  db.run("CREATE TABLE pairs (key text not null primary key, value text not null)", (err) => {
    db.run("INSERT INTO pairs VALUES(?, ?)", ["A","aa"], (err) => {
       if (err)
         console.log("OK")
       else
         console.log(err);
       db.close();
    });
  });
});

all メソッド

// テーブルのデータ取得 (db.all())
const DbPath = "data.db";
const sqlite3 = require('sqlite3');
let db = new sqlite3.Database(DbPath, (err) => {
  if (err) {
    return console.error(err.message);
  }
  console.log(`Connected to the SQlite database "${DbPath}".`);
  db.all("SELECT * FROM table1", [], (err, rows ) => {
    if (err)
      console.log(err.message);
    else {
      for (let row of rows) {
        console.log(row);
      }
      db.close();
    }
  });
});

get メソッド

// 1行のデータを取得する。(db.get())
const DbPath = "data.db";
const sqlite3 = require('sqlite3');
let db = new sqlite3.Database(DbPath, (err) => {
  if (err) {
    return console.error(err.message);
  }
  console.log(`Connected to the SQlite database "${DbPath}".`);
  db.get("SELECT * FROM table1 where n=?", [1], (err, row ) => {
    if (err)
      console.log(err.message);
    else {
      console.log(row);
      db.close();
    }
  });
});

each メソッド

// クエリー結果を行ごとに取得する。(db.each())
const DbPath = "data.db";
const sqlite3 = require('sqlite3');
let db = new sqlite3.Database(DbPath, (err) => {
  if (err) {
    return console.error(err.message);
  }
  console.log(`Connected to the SQlite database "${DbPath}".`);
  db.each("SELECT * FROM table1", [], (err, row ) => {
    if (err)
      console.log(err.message);
    else {
      console.log(row);
    }
  });
});

serialize メソッド

// メモリ上のデータベースを作成して利用する。(db.serialize())
const sqlite3 = require('sqlite3');
let db = new sqlite3.Database(':memory:', (err) => {
  if (err)
    return console.error(err.message);
});

db.serialize(() => {
  db.run("CREATE TABLE pairs (key text not null primary key, value text not null)")
     .run("INSERT INTO pairs VALUES(?, ?)", ["A","aa"])
     .run("INSERT INTO pairs VALUES(?, ?)", ["B","bb"])
     .each("SELECT * FROM pairs", [], (err, row) => {
       if (err)
         throw err;
       else
         console.log(row);
     });
});

 
コメントする

投稿者: : 2023/04/05 投稿先 JavaScript, Node.js

 

タグ: ,

コメントを残す