我不知道何时关闭node-sqlite3中的数据库,或者实际上如何使用该包。似乎如果我运行这个,我会得到“没有这样的表:房间”。最终,在运行足够多次后,我可能会设法制作表格。
var sqlite3 = require('sqlite3').verbose();
class RoomManager{
constructor(options){
this.db = this._createDb();
this.table = "rooms";
this._createTable();
this.addRoom({
name : 'test3'
}).getRooms()
this.deleteRoom({
name : 'test3'
}).getRooms();
return this;
}
_createDb() {
return new sqlite3.Database('chat');
}
_createTable(){
this.db.run("CREATE TABLE IF NOT EXISTS " + this.table + " (name TEXT, size INT)");
return this;
}
addRoom(options){
this.db.run("INSERT INTO " + this.table + " (name, size) VALUES ($name, $size)", {
$name : options.name,
$size : options.size || 1000
});
return this;
}
getRooms(){
this.db.all("SELECT rowid, name, size FROM " + this.table, function(err, rows) {
rows.forEach(function (row) {
console.log(row.rowid + ": " + row.name + " - " + row.size);
});
});
return this;
}
getRoom(options){
if(options.name){
this.db.get("SELECT * FROM " + this.table + " WHERE name = $name", {
$name : options.name
}, function(err, row){
return row;
});
}
}
deleteRoom(options){
this.db.run("DELETE FROM " + this.table + " WHERE name = $name", {
$name : options.name
});
return this;
}
}
module.exports = RoomManager;
最佳答案
你的问题是 Node 是异步的。因此,您必须通过回调函数等待命令结束。例如
this.db.run(query, params, function(err) {
if (err)
return console.log(err);
// do next query here
})
Sqlite模块可以通过db.serialize来控制流量。恕我直言,在常见情况下它没有用。最好使用异步模块或 promise 。
关于javascript - Node sqlite3何时关闭数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38554397/