Nodejs操作sqlite的模块,比较流行的有两个:better-sqlite3
和 sqlite3
,我们这里使用的是 better-sqlite3
文档地址:https://www.npmjs.com/package/better-sqlite3
安装
我使用的是intel版的MacOS系统,在这个系统下安装better-sqlite3
和 sqlite3
的安装步骤基本基本一样,但是都要有些前置条件:
需要安装Python3.6+
需要安装node-pre-gyp
需要安装node-gypsudo
npm install -g node-pre-gyp
sudo npm install -g node-gyp
需要安装xcodexcode-select --install
如果前面的都安装完毕,那么better-sqlite
还是挺好安装的:
npm install better-sqlite3 --register=https://npmmirror.com/mirrors
使用 better-sqlite3 的API
创建数据库和数据库连接对象
const sqlite = require('better-sqlite3'); const conn = new sqlite('path/to/database.db');
sqlite数据库为一个文件,如果该文件之前不存在,则在使用 new sqlite('path/to/database.db')
创建连接对象的时候,自动创建该文件。
创建数据表
conn.exec(` CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY, name TEXT, age INTEGER )` );
插入数据
const stmt = conn.prepare('INSERT INTO users (name, age) VALUES (?, ?)') console.log(stmt.run('小黑', 19));
批量插入数据,可以结合事务处理来使用:
const insertData = [ { name: '二狗子', age: 25 }, { name: '小白', age: 30 }, { name: '小红', age: 35 }, ]; const insertStmt = conn.prepare('INSERT INTO users (name, age) VALUES (?, ?)'); // 创建一个事务 const insertTransaction = conn.transaction(function (data) { for (const row of data) { insertStmt.run(row.name, row.age); } }); // 将数据传入到事务中 let res = insertTransaction(insertData); // 结果为undefined console.log(res);
如果,插入的过程中遇到错误,会抛出异常,可以使用 try
……catch
进行捕获。
查询数据
// const stmt = conn.prepare('SELECT * FROM users') // console.log(stmt.get()); // console.log(stmt.all()); const stmt = conn.prepare('SELECT * FROM users WHERE id=?') console.log(stmt.get(1)); console.log(stmt.all(2));
.get()
是获取一条数据,.all()
方法是获取多条数据
修改数据
const stmt = conn.prepare('UPDATE users SET name=? WHERE id=?') let res = stmt.run('小黑子', 2) console.log(res);
批量更新也可以结合事务处理来使用:
// 批量更新数据 const updateData = [ { id: 1, name: 'John Doe', age: 26 }, { id: 2, name: 'Jane Smith', age: 31 }, // 更多数据行... ]; const updateStmt = db.prepare('UPDATE your_table SET name = ?, age = ? WHERE id = ?'); const updateTransaction = db.transaction((data) => { for (const row of data) { updateStmt.run(row.name, row.age, row.id); } }); updateTransaction(updateData);
删除数据
const stmt = conn.prepare('DELETE FROM users WHERE id=?') let res = stmt.run(2) console.log(res);