• 【Node.js操作SQLite指南】


    Node.js操作SQLite指南

    在本篇博客中,我们将学习如何在Node.js中操作SQLite数据库。我们将使用sqlite3模块来创建数据库、创建表以及进行数据的增删改查操作。

    安装sqlite3模块

    首先,我们需要安装sqlite3模块。在终端中运行以下命令来安装sqlite3模块:

    npm install sqlite3
    
    • 1

    创建数据库

    使用sqlite3模块创建一个数据库连接,并创建一个数据库文件。以下是示例代码:

    const sqlite3 = require('sqlite3').verbose();
    
    // 创建数据库连接
    const db = new sqlite3.Database('mydatabase.db');
    
    • 1
    • 2
    • 3
    • 4

    创建表

    使用SQL语句在数据库中创建表。以下是示例代码:

    // 创建表
    db.run(`CREATE TABLE IF NOT EXISTS users (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      name TEXT,
      age INTEGER
    )`);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    数据的增删改查

    使用SQL语句执行数据的增删改查操作。以下是一些示例代码:

    插入数据

    // 插入数据
    db.run(`INSERT INTO users (name, age) VALUES ('John Doe', 25)`);
    
    • 1
    • 2

    查询数据

    // 查询数据
    db.all(`SELECT * FROM users`, (err, rows) => {
      if (err) {
        console.error(err);
      } else {
        console.log(rows);
      }
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    更新数据

    // 更新数据
    db.run(`UPDATE users SET age = 30 WHERE name = 'John Doe'`);
    
    • 1
    • 2

    删除数据

    // 删除数据
    db.run(`DELETE FROM users WHERE name = 'John Doe'`);
    
    • 1
    • 2

    关闭数据库连接

    在完成数据库操作后,记得关闭数据库连接。以下是示例代码:

    // 关闭数据库连接
    db.close();
    
    • 1
    • 2

    请注意,上述代码只是一个简单的示例,可以根据实际需求进行更复杂的操作。同时,还可以使用参数化查询来防止SQL注入攻击。

    希望本篇博客对有所帮助!如果有任何疑问,请随时提问。

    SQLite3的Node.js工具类

    以下是一个封装了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;
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141

    在上述示例代码中,我们首先引入了SQLiteDB类,并创建了一个数据库连接。然后,我们使用createTable方法创建了一个名为users的表。接下来,我们使用insertData方法插入了一条数据。然后,我们使用updateData方法更新了数据。最后,我们使用deleteData方法删除了符合条件的数据。最后,我们使用closeConnection方法关闭了数据库连接。

    请注意,需要将mydatabase.db替换为实际的数据库文件名。另外,根据需求,可以根据表的结构和数据来调整示例代码中的参数。

    希望这个封装的类对有所帮助!如果有任何疑问,请随时提问。

  • 相关阅读:
    XSS靶场(1-11关)
    Hive与Hbase的区别与联系
    社会统计课程笔记
    containerd拉取私库镜像失败(kubelet)
    批量下载Landsat遥感影像的方法
    el-upload 上传&表单校验成功后再触发上传
    Linux——VIM编辑器(详细)
    C#教程12:结构
    Flink 作业管理器:核心功能、角色与责任详解
    ARM汇编
  • 原文地址:https://blog.csdn.net/No_Name_Cao_Ni_Mei/article/details/132869348