在本篇博客中,我们将学习如何在Node.js中操作SQLite数据库。我们将使用sqlite3模块来创建数据库、创建表以及进行数据的增删改查操作。
首先,我们需要安装sqlite3模块。在终端中运行以下命令来安装sqlite3模块:
npm install sqlite3
使用sqlite3模块创建一个数据库连接,并创建一个数据库文件。以下是示例代码:
const sqlite3 = require('sqlite3').verbose(); // 创建数据库连接 const db = new sqlite3.Database('mydatabase.db');
使用SQL语句在数据库中创建表。以下是示例代码:
// 创建表 db.run(`CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER )`);
使用SQL语句执行数据的增删改查操作。以下是一些示例代码:
// 插入数据 db.run(`INSERT INTO users (name, age) VALUES ('John Doe', 25)`);
// 查询数据 db.all(`SELECT * FROM users`, (err, rows) => { if (err) { console.error(err); } else { console.log(rows); } });
// 更新数据 db.run(`UPDATE users SET age = 30 WHERE name = 'John Doe'`);
// 删除数据 db.run(`DELETE FROM users WHERE name = 'John Doe'`);
在完成数据库操作后,记得关闭数据库连接。以下是示例代码:
// 关闭数据库连接 db.close();
请注意,上述代码只是一个简单的示例,可以根据实际需求进行更复杂的操作。同时,还可以使用参数化查询来防止SQL注入攻击。
希望本篇博客对有所帮助!如果有任何疑问,请随时提问。
以下是一个封装了SQLite3的Node.js类,用于实现数据在表中的增删改,分页,自定义sql操作:
const sqlite3 = require('sqlite3').verbose(); class SQLiteDB { constructor(databaseName) { this.db = new sqlite3.Database(databaseName); } createTable(tableName, columns) { const columnDefinitions = columns.map(column => `${column.name} ${column.type}`).join(', '); const query = `CREATE TABLE IF NOT EXISTS ${tableName} (${columnDefinitions})`; this.db.run(query); } insertData(tableName, data) { const columns = Object.keys(data).join(', '); const placeholders = Object.keys(data).map(() => '?').join(', '); const values = Object.values(data); const query = `INSERT INTO ${tableName} (${columns}) VALUES (${placeholders})`; this.db.run(query, values); } updateData(tableName, data, condition) { const setClause = Object.keys(data).map(column => `${column} = ?`).join(', '); const values = Object.values(data); const query = `UPDATE ${tableName} SET ${setClause} WHERE ${condition}`; this.db.run(query, values); } deleteData(tableName, condition) { const query = `DELETE FROM ${tableName} WHERE ${condition}`; this.db.run(query); } executeQuery(query, params, callback) { this.db.all(query, params, (err, rows) => { if (err) { console.error(err); } else { callback(rows); } }); } /** * 获取分页数据 * @param tableName * @param page * @param pageSize * @param condition // const condition = "column_name = 'value'"; * @returns {Promise} */ getPagedData(tableName, page, pageSize,condition) { const offset = (page - 1) * pageSize; const countQuery = `SELECT COUNT(*) as total FROM ${tableName} WHERE ${condition}`; const dataQuery = `SELECT * FROM ${tableName} WHERE ${condition} LIMIT ? OFFSET ?`; return new Promise((resolve, reject) => { this.db.serialize(() => { this.db.get(countQuery, (err, row) => { if (err) { reject(err); } else { const total = row.total; this.db.all(dataQuery, [pageSize, offset], (err, rows) => { if (err) { reject(err); } else { const totalPages = Math.ceil(total / pageSize); resolve({ data: rows, total, totalPages }); } }); } }); }); }); } closeConnection() { this.db.close(); } } //================= 使用案例 ================================== // const SQLiteDB = require('./SQLiteDB'); // 创建数据库连接 // const db = new SQLiteDB('D:\\WuWorkSpace\\code\\a-wu-project\\爬虫和逆向\\crawler-wusp\\AoMenMa\\2023\\aomen2023.db'); // // // 执行自定义SQL查询 // const query = 'SELECT * FROM users WHERE age > ?'; // const params = [30]; // db.executeQuery(query, params, rows => { // console.log(rows); // }); // // // 创建表 // const columns = [ // { name: 'id', type: 'INTEGER PRIMARY KEY AUTOINCREMENT' }, // { name: 'name', type: 'TEXT' }, // { name: 'age', type: 'INTEGER' } // ]; // db.createTable('users', columns); // // // 插入数据 // const data = { name: 'John Doe', age: 25 }; // db.insertData('users', data); // // // 更新数据 // const newData = { age: 30 }; // const condition = 'name = "John Doe"'; // db.updateData('users', newData, condition); // // // 删除数据 // const deleteCondition = 'age > 30'; // db.deleteData('users', deleteCondition); // // // 关闭数据库连接 // db.closeConnection(); //===================== 分页案例 =============================== // const page = 1; // const pageSize = 10; // const condition = "column_name = 'value'"; // db.getPagedData("user", page, pageSize,condition) // .then(({ data, total, totalPages }) => { // console.log(data); // 处理分页查询结果 // console.log(total); // 总数 // console.log(totalPages); // 总页数 // }) // .catch(err => { // console.error(err); // 处理错误 // }) // .finally(() => { // db.closeConnection(); // 关闭数据库连接 // }); module.exports = SQLiteDB;
在上述示例代码中,我们首先引入了SQLiteDB类,并创建了一个数据库连接。然后,我们使用createTable方法创建了一个名为users的表。接下来,我们使用insertData方法插入了一条数据。然后,我们使用updateData方法更新了数据。最后,我们使用deleteData方法删除了符合条件的数据。最后,我们使用closeConnection方法关闭了数据库连接。
请注意,需要将mydatabase.db替换为实际的数据库文件名。另外,根据需求,可以根据表的结构和数据来调整示例代码中的参数。
希望这个封装的类对有所帮助!如果有任何疑问,请随时提问。
上一篇:Rust基础篇之注释、函数