NodeJS操作SQLite

Nodejs操作sqlite的模块,比较流行的有两个:better-sqlite3sqlite3,我们这里使用的是 better-sqlite3

文档地址:https://www.npmjs.com/package/better-sqlite3

安装

我使用的是intel版的MacOS系统,在这个系统下安装better-sqlite3sqlite3的安装步骤基本基本一样,但是都要有些前置条件:

需要安装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);


微信 遇到疑问可加微信进行反映