私はsqlite3のネストされたクエリケースを持っています。各クエリ結果をjson配列にプッシュして返すことを望んでいました。ただし、2 回目の選択呼び出しでは、常に「エラー: SQLITE_MISUSE: データベース ハンドルが閉じられています」というメッセージが表示されます。2 番目のクエリの前に db.close() が呼び出されるようです。
これはなぜですか、シリアライズでこれを処理できると思いました。修正方法を教えてください。
var getMyDbInfo = function(callback) {
var db = new sqlite3.Database("MyDB.sqlite3");
db.serialize(function() {
var myJsonObj = {};
db.each("select * from Table1",
function(err, row) {
console.log("\n---- 0 ----\n");
// calculate doorId from row
doorId = ...
db.all("select * from Table2 where ID=" + doorId,
function(err, row2) {
console.log("---- 6 ----\n");
if(err) {
console.log("-- ERR: " + err);
} else {
console.log(row2);
var myJsonElem = {ID:row.ID,
DoorName: row2.DoorName,
TimeSpec: row2.TimeSpec };
myJsonObj.data.push(myJsonElem);
}
}
);
}
);
callback(null, myJsonObj);
});
console.log("---- 10 ----\n");
db.close();
};