Node.js结合SQLite数据库使用

运维2年前发布 杨帆舵手
197 00
欢迎指数:
参与人数:

在现代应用开发中,Node.js 和 SQLite 的结合提供了轻量级的数据库解决方案,非常适合小型项目或嵌入式系统开发。SQLite 是一个无需安装、配置简单的嵌入式数据库,适用于在本地或小型应用中快速部署数据存储。而 Node.js 作为一个高效的 JavaScript 运行环境,与 SQLite 的集成也十分流畅。
本文将介绍如何使用 Node.js 结合 SQLite,详细说明如何进行数据库连接、查询、插入、更新等操作。

1. 环境准备

1.1 安装 Node.js 和 SQLite

首先,你需要安装 Node.js。可以通过官网下载 Node.js 安装包,也可以通过包管理工具如 nvm 来管理不同版本的 Node.js。
要在 Node.js 中使用 SQLite,需要安装相应的 SQLite 库。Node.js 社区提供了 sqlite3 这个库来支持 SQLite。
通过 npm 安装 sqlite3:

npm install sqlite3

安装成功后,你就可以在项目中引入并使用 SQLite。

2. 连接 SQLite 数据库

SQLite 数据库是一个文件数据库,因此只需提供文件路径,便可创建或打开该数据库文件。

2.1 打开数据库连接

以下是打开 SQLite 数据库的代码示例:

const sqlite3 = require('sqlite3').verbose();
// 打开数据库文件,若文件不存在则会自动创建
const db = new sqlite3.Database('./mydb.sqlite', (err) => {
if (err) {
return console.error('❌ 数据库连接失败:', err.message);
}
console.log('✅ 成功连接到 SQLite 数据库。');
});

解释:

  • sqlite3.verbose():输出详细日志,有助于调试。
  • new sqlite3.Database():打开或创建一个 SQLite 数据库。这里提供了数据库文件的路径 ./mydb.sqlite。

    3. 创建表格

    在连接数据库后,我们通常需要创建一张表来存储数据。以下是创建一张名为 users 的用户表的代码:

    db.run(`CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    email TEXT UNIQUE NOT NULL
    )`, (err) => {
    if (err) {
    return console.error('❌ 表创建失败:', err.message);
    }
    console.log('✅ 表 "users" 创建成功或已存在。');
    });

    解释:

  • db.run():执行一条 SQL 语句,这里用于创建表。
  • id 列为自增主键,name 和 email 列用于存储用户的姓名和邮箱,且邮箱必须唯一。

    ?️ 表结构图:

    字段类型说明
    idINTEGER自增主键
    nameTEXT用户名
    emailTEXT用户邮箱,唯一

    4. 插入数据

    向表 users 中插入数据可以通过 db.run() 方法实现。下面是插入一个用户的例子:

    const name = 'John Doe';
    const email = 'john@example.com';
    db.run(`INSERT INTO users (name, email) VALUES (?, ?)`, [name, email], function(err) {
    if (err) {
    return console.error('❌ 插入数据失败:', err.message);
    }
    console.log(`✅ 插入数据成功,用户ID:${this.lastID}`);
    });

    解释:

  • ?:是 SQL 中的占位符,避免 SQL 注入风险。
  • [name, email]:传递的参数会替换 SQL 中的占位符。
  • this.lastID:返回插入成功的记录 ID。

    5. 查询数据

    查询数据可以使用 db.all() 或 db.get() 方法:

  • db.all():用于查询多条记录。
  • db.get():用于查询单条记录。

    5.1 查询所有用户

    db.all(`SELECT * FROM users`, [], (err, rows) => {
    if (err) {
    return console.error('❌ 查询数据失败:', err.message);
    }
    console.log('✅ 查询到的用户数据:');
    console.table(rows);
    });

    解释:

  • db.all():查询 users 表中的所有记录,rows 是返回的结果集。

    5.2 查询单个用户

    const userId = 1;
    db.get(`SELECT * FROM users WHERE id = ?`, [userId], (err, row) => {
    if (err) {
    return console.error('❌ 查询数据失败:', err.message);
    }
    if (row) {
    console.log(`✅ 查询到的用户:`, row);
    } else {
    console.log('❌ 未找到该用户。');
    }
    });

    解释:

  • db.get():查询符合条件的单条记录,row 是返回的结果。

    ? 查询数据流程图:

    graph TD;
    A[查询数据请求] --> B{查询类型};
    B --> |单条记录| C[使用db.get];
    B --> |多条记录| D[使用db.all];
    C --> E[返回单条结果];
    D --> F[返回结果集];

    6. 更新数据

    我们可以使用 db.run() 方法来更新记录。下面是更新用户邮箱的示例:

    const newEmail = 'john.doe@example.com';
    const userId = 1;
    db.run(`UPDATE users SET email = ? WHERE id = ?`, [newEmail, userId], function(err) {
    if (err) {
    return console.error('❌ 更新数据失败:', err.message);
    }
    console.log(`✅ 成功更新 ${this.changes} 条记录。`);
    });

    解释:

  • db.run():执行更新语句,this.changes 表示更新的记录数。

    7. 删除数据

    同样可以使用 db.run() 方法来删除记录:

    const userId = 1;
    db.run(`DELETE FROM users WHERE id = ?`, [userId], function(err) {
    if (err) {
    return console.error('❌ 删除数据失败:', err.message);
    }
    console.log(`✅ 成功删除 ${this.changes} 条记录。`);
    });

    解释:

  • DELETE 语句用于删除符合条件的记录,this.changes 表示删除的记录数。

    8. 关闭数据库连接

    在应用程序结束或不再需要数据库时,应该关闭数据库连接以释放资源:

    db.close((err) => {
    if (err) {
    return console.error('❌ 关闭数据库连接失败:', err.message);
    }
    console.log('✅ 成功关闭数据库连接。');
    });

    解释:

  • db.close():关闭与 SQLite 数据库的连接,防止资源泄漏。

    9. 异常处理与优化

    9.1 异常处理

    在实际开发中,良好的异常处理至关重要。每个 SQLite 操作都应该检查错误并进行合理的错误处理。

  • 错误信息日志记录:当遇到数据库连接或查询错误时,将错误信息记录下来,方便后期调试。

    9.2 性能优化

    1. 事务处理:当涉及多条数据库操作时,使用事务来确保操作的一致性和提高性能。

      db.serialize(() => {
      db.run('BEGIN TRANSACTION');
      db.run('UPDATE users SET name = ? WHERE id = ?', ['NewName', 1]);
      db.run('UPDATE users SET email = ? WHERE id = ?', ['newemail@example.com', 1]);
      db.run('COMMIT');
      });

      解释:

  • BEGIN TRANSACTION:开始事务。
  • COMMIT:提交事务。

    1. 索引:为常查询的列(如 email 列)创建索引,可以加快查询速度:

      db.run(`CREATE INDEX idx_users_email ON users(email)`);

      10. 总结

      Node.js 和 SQLite 的结合提供了一种轻量级、简单易用的数据库方案。通过 sqlite3 库,开发者可以方便地在 Node.js 项目中使用 SQLite 数据库,执行基本的 CRUD 操作,并进行性能优化和错误处理。
      本指南从连接数据库、创建表、插入、查询、更新、删除数据到性能优化,详细介绍了如何在 Node.js 项目中高效使用 SQLite。

此站内容质量评分请点击星号为它评分!

您的每一个评价对我们都很重要

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

© 版权声明
广告也精彩

相关文章

广告也精彩

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...