LOADING

Node.js结合SQLite数据库使用

运维2个月前发布 杨帆舵手
16 0 0
广告也精彩
欢迎指数:
参与人数:

在现代应用开发中,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 列为自增主键,nameemail 列用于存储用户的姓名和邮箱,且邮箱必须唯一。

    ?️ 表结构图:

    字段 类型 说明
    id INTEGER 自增主键
    name TEXT 用户名
    email TEXT 用户邮箱,唯一

    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。

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

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

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

让我们改善这篇文章!

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

© 版权声明
广告也精彩

相关文章

广告也精彩

暂无评论

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