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/
node-sqlite3 学习笔记的更多相关文章
- 一点感悟:《Node.js学习笔记》star数突破1000+
		
写作背景 笔者前年开始撰写的<Node.js学习笔记> github star 数突破了1000,算是个里程碑吧. 从第一次提交(2016.11.03)到现在,1年半过去了.突然有些感慨, ...
 - Node.js学习笔记(3):NPM简明教程
		
Node.js学习笔记(3):NPM简明教程 NPM常用操作 更新NPM版本 npm install npm -g -g,表示全局安装.我们可以指定更新版本,只需要在后面填上@版本号即可,也可以输入@ ...
 - 系列文章--Node.js学习笔记系列
		
Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- 简介及安装Node.js开发环境 Nodejs学习笔记(二)--- 事件模块 Nodejs学习笔记(三)--- 模块 Nodejs学 ...
 - Node.js学习笔记(2):基本模块
		
Node.js学习笔记(2):基本模块 模块 引入模块 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在No ...
 - Node.js学习笔记(1):Node.js快速开始
		
Node.js学习笔记(1):Node.js快速开始 Node.js的安装 下载 官方网址:https://nodejs.org/en/ 说明: 在Windows上安装时务必选择全部组件,包括勾选Ad ...
 - Node.js学习笔记(4):Yarn简明教程
		
Node.js学习笔记(4):Yarn简明教程. 引入Yarn NPM是常用的包管理工具,现在我们引入是新一代的包管理工具Yarn.其具有快速.安全.可靠的特点. 安装方式 使用npm工具安装yarn ...
 - Node.js学习笔记(一)
		
1.回调函数 node是一个异步事件驱动的平台,所以在代码中我们经常需要使用回调函数. 例: setTimeout(function(){ console.log('callback is calle ...
 - Node.js学习笔记(一):快速开始
		
最近接了一个node项目,虽然最后顺利完成了,但是由于第一次实战,整个过程是赶出来的,许多地方一知半解.现在项目结束了,就静下心来系统地学一学,理一理,读书不忘拿笔,既然读书了,当然就要记点东西.一方 ...
 - Node.js学习笔记(一)基础介绍
		
什么是Node.js 官网介绍: Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js us ...
 - node.js 学习笔记一
		
2017-05-01 安装node 我没安装,下载即使用.要全局使用的话把node加入到环境变量中即可. 以下命令环境均为 cmd . 体验 体验一: 在命令行输入 node ,即进入 node 程序 ...
 
随机推荐
- PlayFramework 一步一步来 之 页面模板引擎
			
Play的魔板引擎本人认为可以说是为full stack Developers量身打造的功能.在原有的html页面基础上,只需要在html文件名后缀名前面加上”.scala“,就可以在页面上写Scal ...
 - java之路 Hello World 练习
			
class HelloWorld{ /** * 这是主方法 */ public static void main(String[] args){ //输出一句话 System.out.println( ...
 - concurrent.futures性能阐述
			
python因为其全局解释器锁GIL而无法通过线程实现真正的平行计算.这个论断我们不展开,但是有个概念我们要说明,IO密集型 vs. 计算密集型. IO密集型:读取文件,读取网络套接字频繁. 计算密集 ...
 - Ubuntu 下的QQ  WECHAT FOXMAIL解决方案
			
原文链接: https://www.lulinux.com/archives/1319 真心很强大. Ubuntu系发行版*安装deepin wine QQ的步骤 1,安装deepin-wine环境: ...
 - python的语法小结之生成器和迭代器
			
生成器: 首先介绍一下列表生成式:a=[x for x in range(10)] >>>>>>[0, 1, 2, 3, 4, 5, 6 ...
 - 死锁问题------------------------INSERT ... ON DUPLICATE KEY UPDATE*(转)
			
前言 我们在实际业务场景中,经常会有一个这样的需求,插入某条记录,如果已经存在了则更新它如果更新日期或者某些列上的累加操作等,我们肯定会想到使用INSERT ... ON DUPLICATE K ...
 - Nginx服务器中配置非80端口的端口转发方法详解
			
这篇文章主要介绍了Nginx服务器中配置非80端口的端口转发方法详解,文中使用到了Nginx中的proxy_pass配置项,需要的朋友可以参考下 nginx可以很方便的配置成反向代理服务器: 1 2 ...
 - LOJ-10096(强连通+bfs)
			
题目链接:传送门 思路: 强连通缩点,重建图,然后广搜找最长路径. #include<iostream> #include<cstdio> #include<cstrin ...
 - Java List中迭代器遍历
			
在java中,List接口从Collection接口中继承了 iterator()函数,返回值是一个T类型的迭代器(泛型),T是List中元素的类型 public class TestListAndI ...
 - python 特别的生成器表达式
			
Ⅰ起因 学习python的同学通常会遇到这样一道经典生成器测试题: def gen(): for i in range(4): yield i base = gen() for n in (2,10) ...