Node.js使用SQLite同步查询

在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 {
//result
}
})

由于查询结果在回调方法中, 逻辑复杂的时候不得不一层套一层

所以再引人一个包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);
}
}