Nodejs使用轻量级数据库SQLite

专栏收录该内容

Hi I'm Shendi




对于开发桌面软件,数据库当然首选 SQLite 了,轻量且无需安装,可以非常简单的嵌入程序中。

而在 node.js 中,提供了 sqlite3 模块来使用 SQLite



安装依赖

npm install sqlite3


引入依赖

通过 require('sqlite3') 来引入依赖,执行 verbose 函数可以在出错时打印出详细的信息。

const sql = require('sqlite3').verbose();


创建并打开数据库

const db = new sql.Database("sql.db");

当数据库不存在时自动创建,并且返回一个用于操作此数据库的对象

还可以传入一个回调函数,当打开完成时执行

const db = new sql.Database('sql.db', (err) => {
    if (err) throw err;
    console.log("数据库初始化完成");
});

sqlite3库中的几乎所有函数都可以传入一个回调函数,像上面那样,并且执行是异步的

数据库文件会生成在项目的根目录,将其删除=删库。



执行语句

通过打开的数据库对象来执行语句,其中增、删、改使用 run 函数,查询使用 getall


建表

db.run("CREATE TABLE user(id INT)");

上面的代码会创建一个 user 表,但通常会使用下面这种方式,当表不存在则新建,存在则不做操作

db.run("CREATE TABLE IF NOT EXISTS user(id INT, name VARCHAR(64))");

插入数据(Insert)

// 通过参数
db.run("INSERT INTO user VALUES(?,?)", 1, 'Shendi');
// 通过数组
db.run("INSERT INTO user VALUES(?,?)", [1, 'Shendi']);

当执行成功,回调函数中的 this 将会包含一些信息,例如 id 为主键且自增

const db = new sql.Database('sql.db');
db.run("CREATE TABLE IF NOT EXISTS user(id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(64))",(err) => {
    if (err) throw err;

    db.run("INSERT INTO user(name) VALUES(?)", ['Shendi'], function (err) {
        if (err) throw err;
        console.log(this, this.lastID, this.changes);
    });
});

this 将会包含 lastId 代表插入数据的id,changes 代表影响的行数

需要注意的是,传递的函数使用 function () {} 这样的形式 this 才可以拥有信息,使用 () => {} 这样的形式,this 为 {}


修改数据

同插入数据

db.run('UPDATE user SET name=? WHERE id=?', ['砷碲', 4]);

删除数据

db.run('DELETE FROM user WHERE id=?', [4]);

查询数据

db.all("SELECT * FROM user", (err, rows) => {
    if (err) throw err;
    console.log(rows);
});

其中 rows 是数据数组(Array),可以非常方便的直接使用。



关闭数据库

对资源要求高的话可以在使用完成将数据库关闭

db.close();


END

本文链接:https://sdpro.top/blog/html/article/1231.html

♥ 赞助 ♥

尽管去做,或许最终的结果不尽人意,但你不付出,他不付出,那怎会进步呢?