在js中耗时方法一般都是异步的, 使用回调方法来返回结果, 对SQLite的操作也是如此
这里使用sqlite3
1
| npm install --save sqlite3
|
安装完后引人
1
| const sqlite3 = require('sqlite3');
|
正常是像这样使用的
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| this.db = new sqlite3.Database("app.db", (e) => { if (e) { } });
this.db.get(sql, params, (e, result) => { if (e) {
} else { } })
|
由于查询结果在回调方法中, 逻辑复杂的时候不得不一层套一层
所以再引人一个包bluebird
1
| npm install --save bluebird
|
1
| const Promise = require("bluebird");
|
使用这个包可以在nodejs中像在js中一样使用Promise
这时候我们就可以对操作数据库的方法进行封装
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
| class Database { async connect() { return new Promise((resolve, reject) => { this.db = new sqlite3.Database("app.db", (e) => { if (e) { reject(e); } else { resolve(); } }); }); }
async get(sql, params = []) { return new Promise((resolve, reject) => { this.db.get(sql, params, (e, result) => { if (e) { reject(e); } else { resolve(result); } }) }); }
async run(sql, params = []) { return new Promise((resolve, reject) => { this.db.run(sql, params, (e) => { if (e) { reject(e); } else { resolve(); } }) }); } }
|
使用的时候就可以像在Java代码中一样
1 2 3 4 5 6 7 8
| class Test{ async test(){ let db = new Database(); await db.connect(); let result = await db.get("select * from user"); console.log(result); } }
|