【初心者向け】Node.jsでSQLite3データベースを扱うためのチュートリアル
Node.js で SQLite3 データベースを同期的に読み込む方法
方法1: sqlite3 モジュールを使用する
- 必要なパッケージをインストールする
npm install sqlite3
- データベースに接続する
const sqlite3 = require('sqlite3');
const db = new sqlite3.Database('database.sqlite');
- クエリを実行する
const sql = 'SELECT * FROM mytable';
db.all(sql, [], (err, rows) => {
if (err) {
console.error(err);
return;
}
console.log(rows);
});
- データベースを閉じる
db.close();
better-sqlite3は、sqlite3 モジュールよりも使いやすく、多くの機能を提供するモジュールです。
npm install better-sqlite3
const db = require('better-sqlite3')('database.sqlite');
const rows = db.prepare('SELECT * FROM mytable').all();
console.log(rows);
データベースを閉じる必要はありません。better-sqlite3は、接続を自動的に閉じます。
どちらの方法を選択するべきか
どちらの方法を選択しても、SQLite3データベースを同期的に読み込むことができます。
- better-sqlite3 モジュール: より使いやすく、多くの機能を提供しています。
- sqlite3 モジュール: より軽量で、シンプルなAPIを備えています。
- データベースを操作する前に、必ずバックアップを取ってください。
- エラー処理を適切に行うようにしてください。
- 同期的な処理は、パフォーマンスに影響を与える可能性があることに注意してください。多くの場合、非同期的な処理を使用する方が効率的です。
const db = require('better-sqlite3')('database.sqlite');
// データベースに接続する
const db = require('better-sqlite3')('database.sqlite');
// テーブルが存在しなければ作成する
db.exec(`
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL
)
`);
// ユーザーを挿入する
db.prepare('INSERT INTO users (name, email) VALUES (?, ?)').run('Taro Yamada', '[email protected]');
db.prepare('INSERT INTO users (name, email) VALUES (?, ?)').run('Hanako Sato', '[email protected]');
// 全てのユーザーを取得する
const rows = db.prepare('SELECT * FROM users').all();
console.log(rows);
// 特定のユーザーを取得する
const user = db.prepare('SELECT * FROM users WHERE id = ?').get(1);
console.log(user);
このコードの説明
require('better-sqlite3')('database.sqlite')
で、better-sqlite3 モジュールをインポートし、データベースへの接続を作成します。db.exec('CREATE TABLE IF NOT EXISTS users (...)')
で、users
テーブルが存在しなければ作成します。db.prepare('INSERT INTO users (...)').run(...)
で、ユーザーをusers
テーブルに挿入します。db.prepare('SELECT * FROM users').all()
で、全てのユーザーを取得します。
このコードをどのように実行するか
- このコードを
app.js
などのファイルに保存します。 - ターミナルで、以下のコマンドを実行します。
node app.js
- コンソールに、以下の出力が表示されます。
[ { id: 1, name: 'Taro Yamada', email: '[email protected]' },
{ id: 2, name: 'Hanako Sato', email: '[email protected]' } ]
{ id: 1, name: 'Taro Yamada', email: '[email protected]' }
このコードは、基本的な操作をいくつか示しています。データベースの操作方法の詳細については、better-sqlite3 のドキュメントを参照してください。
- エラー処理は省略されています。本番環境で使用する場合は、適切なエラー処理を行うようにしてください。
- このコードは、同期的な処理を使用しています。非同期的な処理を使用するには、Promise や async/await を使用することができます。
Node.js の fs
モジュールを使用して、SQLite3 データベースファイルを直接読み込むことができます。これは、データベースが小さい場合や、シンプルな操作を行う場合に適しています。
const fs = require('fs');
const path = require('path');
const dbPath = path.join(__dirname, 'database.sqlite');
const dbContent = fs.readFileSync(dbPath, 'utf8');
// dbContent を解析して必要なデータを取得する
ネイティブ SQLite ライブラリを使用する
Sequelize などの ORM を使用する
Object-relational mapper (ORM) は、データベースとオブジェクト間のマッピングを容易にするツールです。Sequelize は、Node.js で人気のある ORM の 1 つであり、SQLite を含むさまざまなデータベースをサポートしています。ORM を使用すると、データベース操作をより直感的な方法で記述することができます。
const Sequelize = require('sequelize');
const sequelize = new Sequelize('database', 'username', 'password', {
host: 'localhost',
dialect: 'sqlite',
});
const User = sequelize.define('user', {
name: Sequelize.STRING,
email: Sequelize.STRING,
});
// ユーザーを挿入する
User.create({ name: 'Taro Yamada', email: '[email protected]' });
// 全てのユーザーを取得する
User.findAll().then(users => {
console.log(users);
});
最適な方法は、要件によって異なります。
- 複雑なデータベース操作を行う場合は、ORM を使用するとよいでしょう。
- より高速なパフォーマンスが必要な場合は、ネイティブ SQLite ライブラリを使用する必要があります。
- シンプルな操作を行う場合は、
sqlite3
モジュールまたはfs
モジュールを使用するのが良いでしょう。
json node.js sqlite