zoukankan      html  css  js  c++  java
  • node-sqlite3 学习笔记

    * 使用sqlite3持久化数据
    * 需求:把一个数组中的每个对象,每个对象中的属性,存到xxx.db文件中去,像数据库一样的去操作它
    * 功能:1. 创建数据库(数据库存在的话,那就直接打开)
    *            2. 创建一个表(表存在的话就不用创建啦)
    *            3. 有了数据库和表, 最最基础的功能就是:
    *                  插入数据(单个数据插入或者多个并行插入)
    *                  更新数据(根据不同的条件更新每列数据)
    *                  删除数据(根据不同的条件来删除每列数据)
    *                 查询数据(单个数据查询,多个数据查询)

     安装: 

    npm install sqlite3

    /**
     * Created by Sorrow.X on 2017/7/12.
     */
    var SQLite3 = require('sqlite3').verbose();
    
    /**
     * 使用sqlite3持久化数据   
     * 需求:把一个数组中的每个对象,每个对象中的属性,存到xxx.db文件中去,像数据库一样的去操作它
     * 功能:1. 创建数据库(数据库存在的话,那就直接打开)
     *       2. 创建一个表(表存在的话就不用创建啦)
     *       3. 有了数据库和表, 最最基础的功能就是:
     *          插入数据(单个数据插入或者多个并行插入)
     *          更新数据(根据不同的条件更新每列数据)
     *          删除数据(根据不同的条件来删除每列数据)
     *          查询数据(单个数据查询,多个数据查询)
     */
    class HandleDB {
    
        constructor(options) {
            this.databaseFile = options && options.databaseFile || `./data/test.db`;    // 数据库文件(文件路径+文件名)
            this.tableName = options && options.tableName || `adsTable`;   // 表名
    
            this.db = null;    // 打开的数据库对象
        }
    
        // 连接数据库(不存在就创建,存在则打开)
        connectDataBase() {
            let _self = this;
            return new Promise((resolve, reject) => {
                _self.db = new SQLite3.Database(_self.databaseFile, function(err) {
                    if (err) reject(new Error(err));
                    resolve('数据库连接成功');
                });
            });
        }
    
        /**
         * 创建表
         * @param sentence    CREATE TABLE 语句
         * @used
          let sentence = `
           create table if not exists ${this.tableName}(
                begin_time varchar(255),
                create_time varchar(255),
                end_time varchar(255),
                play_id varchar(255),
                postion_id int(50),
                status int(50),
                task_id int(50)
            );`;
         this.createTable(sentence);
         */
        createTable(sentence) {
            let _self = this;
            return new Promise((resolve, reject) => {
                _self.db.exec(sentence, function(err) {
                    if (err) reject(new Error(err));
                    resolve(`表创建成功 / 已存在,不需要重新创建该表`);
                });
            });
        }
    
        /**
         * 执行 增  删  改  查(单个数据查询或者多个数据查询)
         * @param sql    sql语句
         * @param param     参数(可以是数组或者数字或者字符串,根据sql语句来定)
         * @param mode    执行模式, 默认run,执行sql,如果查询的话,则使用get(单个)all(多个)
         * @returns {Promise}
           @used
           增 : this.sql(`insert into ${this.tableName} (begin_time, create_time, end_time, play_id, postion_id, status, task_id) values(?, ?, ?, ?, ?, ?, ?)`,
                        [obj.begin_time, obj.create_time, obj.end_time, obj.play_id, obj.postion_id, obj.status, obj.task_id]);
    
           删 : this.sql(`delete from ${this.tableName} where id = ?`, id);
    
           改 : this.sql(`update ${this.tableName} set begin_time = ?, status = ? where postion_id = ?`, [begin_timeValue, statusValue, postion_idValue]);
    
           查 : this.sql(`select * from ${this.tableName} where id = ?`, id, 'get/all');
         */
        sql(sql, param, mode) {
            let _self = this;
            mode = mode == 'all' ? 'all' : mode == 'get' ? 'get' : 'run';
            return new Promise((resolve, reject) => {
                _self.db[mode](sql, param,
                    function (err, data) {    // data: Array, Object
                        if (err) {
                            reject(new Error(err));
                        } else {
                            if (data) {
                                resolve(data);    // 返回数据查询成功的结果
                            } else {
                                resolve('success');    // 提示 增 删 改 操作成功
                            };
                        };
                    }
                );
            });
        }
    };
    
    module.exports = HandleDB;

    // 使用

    // used:
    let db = new HandleDB({
        databaseFile: './data/adsbase.db',
        tableName: 'ads'
    });
    
    db.connectDataBase().then((result)=>{
        console.log(result);
        // 创建表(如果不存在的话,则创建,存在的话, 不会创建的,但是还是会执行回调)
        let sentence = `
           create table if not exists ${db.tableName}(
                begin_time varchar(255),
                create_time varchar(255),
                end_time varchar(255),
                play_id varchar(255),
                postion_id int(50),
                status int(50),
                task_id int(50),
                same_day int(50)
            );`;
        return db.createTable(sentence);
    }).then((result)=>{
        console.log(result);
        doLogic();
    }).catch((err)=>{
        console.error(err);
    });
    
    let doLogic = function() {
    
        //
        db.sql(`insert into ${db.tableName} (begin_time, create_time, end_time, play_id, postion_id, status, task_id, same_day) values(?, ?, ?, ?, ?, ?, ?, ?)`,
            ['2017/7/12', '2017/7/12', '2017/7/12', 102, 3, 0, 11, '2017-7-12']).then((res)=>{
            console.log(res);
        }).catch((err)=>{
            console.log(err);
        });
    
        // 一次性插入多个数据
        var data = {
            "Body": [
                {
                    "begin_time": "1970-01-01 00:00:00",
                    "create_time": "2017-07-11",
                    "end_time": "",
                    "play_id": 17,
                    "postion_id": 1,
                    "status": 0,
                    "task_id": 24
                },
                {
                    "begin_time": "1970-01-01 00:00:00",
                    "create_time": "2017-07-11",
                    "end_time": "",
                    "play_id": 18,
                    "postion_id": 4,
                    "status": 0,
                    "task_id": 24
                },
                {
                    "begin_time": "1970-01-01 00:00:00",
                    "create_time": "2017-07-11",
                    "end_time": "",
                    "play_id": 19,
                    "postion_id": 2,
                    "status": 0,
                    "task_id": 24
                },
                {
                    "begin_time": "1970-01-01 00:00:00",
                    "create_time": "2017-07-11",
                    "end_time": "",
                    "play_id": 20,
                    "postion_id": 3,
                    "status": 0,
                    "task_id": 24
                }
            ],
            "Code": 0,
            "Message": ""
        };
        var arr = data.Body;
        var promises = arr.map(function(obj) {
            return db.sql(`insert into ${db.tableName} (begin_time, create_time, end_time, play_id, postion_id, status, task_id, same_day) values(?, ?, ?, ?, ?, ?, ?, ?)`,
                [obj.begin_time, obj.create_time, obj.end_time, obj.play_id, obj.postion_id, obj.status, obj.task_id, '2017-7-12']);
        });
        Promise.all(promises).then(function (posts) {
            console.log('全部插入完毕', posts)
        }).catch(function(reason){
            console.error(reason);
        });
    
        //
        db.sql(`delete from ${db.tableName} where same_day = ?`, '2017-7-12').then((res)=>{
            console.log(res);
        }).catch((err)=>{
            console.log(err);
        });
    
        //
        db.sql(`update ${db.tableName} set task_id = ? where same_day = ?`, [4, '2017-7-12']).then((res)=>{
            console.log(res);
        }).catch((err)=>{
            console.log(err);
        });
    
        //
        db.sql(`select * from ${db.tableName} where same_day = ?`, '2017-7-12', 'all').then((res)=>{
            console.log(res);
        }).catch((err)=>{
            console.log(err);
        });
    };

    文档: https://github.com/mapbox/node-sqlite3/wiki/API

    sql工具下载: http://www.sqliteexpert.com/

  • 相关阅读:
    015.Delphi插件之QPlugins,FMX插件窗口
    014.Delphi插件之QPlugins,MDI窗口
    013.Delphi插件之QPlugins,模块化代码示例
    012.Delphi插件之QPlugins,多实例内嵌窗口服务
    011.Delphi插件之QPlugins,延时加载服务
    010.Delphi插件之QPlugins,遍历服务接口
    009.Delphi插件之QPlugins,服务的热插拔
    008.Delphi插件之QPlugins,服务的两种调用方法
    007.Delphi插件之QPlugins,插件的卸载和重新加载
    006.Delphi插件之QPlugins,多服务演示
  • 原文地址:https://www.cnblogs.com/sorrowx/p/7162356.html
Copyright © 2011-2022 走看看