Loading... # Node.js 结合 SQLite 数据库使用指南 在现代应用开发中,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`: ```bash npm install sqlite3 ``` 安装成功后,你就可以在项目中引入并使用 SQLite。 ## 2. 连接 SQLite 数据库 SQLite 数据库是一个文件数据库,因此只需提供文件路径,便可创建或打开该数据库文件。 ### 2.1 打开数据库连接 以下是打开 SQLite 数据库的代码示例: ```javascript 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` 的用户表的代码: ```javascript 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` 列用于存储用户的姓名和邮箱,且邮箱必须唯一。 ### 🛠️ 表结构图: | **字段** | **类型** | **说明** | | -------------- | -------------- | -------------- | | id | INTEGER | 自增主键 | | name | TEXT | 用户名 | | email | TEXT | 用户邮箱,唯一 | ## 4. 插入数据 向表 `users` 中插入数据可以通过 `db.run()` 方法实现。下面是插入一个用户的例子: ```javascript 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 查询所有用户 ```javascript 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 查询单个用户 ```javascript 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` 是返回的结果。 ### 🧠 查询数据流程图: ```mermaid graph TD; A[查询数据请求] --> B{查询类型}; B --> |单条记录| C[使用db.get]; B --> |多条记录| D[使用db.all]; C --> E[返回单条结果]; D --> F[返回结果集]; ``` ## 6. 更新数据 我们可以使用 `db.run()` 方法来更新记录。下面是更新用户邮箱的示例: ```javascript 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()` 方法来删除记录: ```javascript 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. 关闭数据库连接 在应用程序结束或不再需要数据库时,应该关闭数据库连接以释放资源: ```javascript db.close((err) => { if (err) { return console.error('❌ 关闭数据库连接失败:', err.message); } console.log('✅ 成功关闭数据库连接。'); }); ``` **解释**: - `db.close()`:关闭与 SQLite 数据库的连接,防止资源泄漏。 ## 9. 异常处理与优化 ### 9.1 异常处理 在实际开发中,良好的异常处理至关重要。每个 SQLite 操作都应该检查错误并进行合理的错误处理。 - **错误信息日志记录**:当遇到数据库连接或查询错误时,将错误信息记录下来,方便后期调试。 ### 9.2 性能优化 1. **事务处理**:当涉及多条数据库操作时,使用事务来确保操作的一致性和提高性能。 ```javascript 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`:提交事务。 2. **索引**:为常查询的列(如 `email` 列)创建索引,可以加快查询速度: ```javascript db.run(`CREATE INDEX idx_users_email ON users(email)`); ``` ## 10. 总结 Node.js 和 SQLite 的结合提供了一种轻量级、简单易用的数据库方案。通过 `sqlite3` 库,开发者可以方便地在 Node.js 项目中使用 SQLite 数据库,执行基本的 CRUD 操作,并进行性能优化和错误处理。 本指南从连接数据库、创建表、插入、查询、更新、删除数据到性能优化,详细介绍了如何在 Node.js 项目中高效使用 SQLite。 最后修改:2024 年 10 月 24 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏