w*s 发帖数: 7227 | 1 i have a sqlite3 nested query case. Was hoping to push each query result to
a json array and return it back. But always get "Error: SQLITE_MISUSE:
Database handle is closed" for the 2nd select call. Seems the db.close()
gets called before the 2nd query.
Why is this, i thought serialize can take care of this. How to fix it please
?
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();
}; |
a9 发帖数: 21638 | 2 你的db.each里面的又变成异步了。
db.serialize里面专门有针对你这种情况的说明
to
please
【在 w*s 的大作中提到】 : i have a sqlite3 nested query case. Was hoping to push each query result to : a json array and return it back. But always get "Error: SQLITE_MISUSE: : Database handle is closed" for the 2nd select call. Seems the db.close() : gets called before the 2nd query. : Why is this, i thought serialize can take care of this. How to fix it please : ? : var getMyDbInfo = function(callback) { : var db = new sqlite3.Database("MyDB.sqlite3"); : db.serialize(function() { : var myJsonObj = {};
|
w*s 发帖数: 7227 | 3 大牛,能详细说说吗?俺不会
【在 a9 的大作中提到】 : 你的db.each里面的又变成异步了。 : db.serialize里面专门有针对你这种情况的说明 : : to : please
|
a9 发帖数: 21638 | 4 试试这样?
const db = new sqlite3.Database("MyDB.sqlite3");
db.all("select * from table1", rows => {
db.serialize(() => {
for(let i = 0; i < rows.length; i++) {
// get doorId
db.all('select * from table2 where ID=?', doorId, table2Rows =>
{
myJsonObj.data.push(myJsonElem);
})
}
db.close();
})
})
【在 w*s 的大作中提到】 : 大牛,能详细说说吗?俺不会
|
w*s 发帖数: 7227 | 5 i have a sqlite3 nested query case. Was hoping to push each query result to
a json array and return it back. But always get "Error: SQLITE_MISUSE:
Database handle is closed" for the 2nd select call. Seems the db.close()
gets called before the 2nd query.
Why is this, i thought serialize can take care of this. How to fix it please
?
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();
}; |
a9 发帖数: 21638 | 6 你的db.each里面的又变成异步了。
db.serialize里面专门有针对你这种情况的说明
to
please
【在 w*s 的大作中提到】 : i have a sqlite3 nested query case. Was hoping to push each query result to : a json array and return it back. But always get "Error: SQLITE_MISUSE: : Database handle is closed" for the 2nd select call. Seems the db.close() : gets called before the 2nd query. : Why is this, i thought serialize can take care of this. How to fix it please : ? : var getMyDbInfo = function(callback) { : var db = new sqlite3.Database("MyDB.sqlite3"); : db.serialize(function() { : var myJsonObj = {};
|
w*s 发帖数: 7227 | 7 大牛,能详细说说吗?俺不会
【在 a9 的大作中提到】 : 你的db.each里面的又变成异步了。 : db.serialize里面专门有针对你这种情况的说明 : : to : please
|
a9 发帖数: 21638 | 8 试试这样?
const db = new sqlite3.Database("MyDB.sqlite3");
db.all("select * from table1", rows => {
db.serialize(() => {
for(let i = 0; i < rows.length; i++) {
// get doorId
db.all('select * from table2 where ID=?', doorId, table2Rows =>
{
myJsonObj.data.push(myJsonElem);
})
}
db.close();
})
})
【在 w*s 的大作中提到】 : 大牛,能详细说说吗?俺不会
|
|
w*s 发帖数: 7227 | 9 大牛,
好了不少,我要出门给Trump做志愿者了,下次再跟你请教。
谢谢!
=>
【在 a9 的大作中提到】 : 试试这样? : const db = new sqlite3.Database("MyDB.sqlite3"); : db.all("select * from table1", rows => { : db.serialize(() => { : for(let i = 0; i < rows.length; i++) { : // get doorId : db.all('select * from table2 where ID=?', doorId, table2Rows => : { : myJsonObj.data.push(myJsonElem); : })
|
w*s 发帖数: 7227 | 10 大牛,this is the best i can get,
How to improve it please, basically i'm lost in the callback for the 2nd one.
Also the db.close() is always called before the 2nd query finishes, even i
have serialize().
var getInfo1Db = function(callback) {
var db = new sqlite3.Database("DB.sqlite3");
var cnt = 0;
var info1JsonObj = [];
db.all("select * from Info1DB",
function(err, rows) {
db.serialize(function() {
for(var ii=0, len=rows.length; ii
var t2 = rows[ii].info1;
var doorId = ...
db.all("select * from DoorDB where ObjectID=" + doorId,
function(err, row2) {
if(err) {
} else {
var doorName = row2[0]...
var info1JsonElem = {
"DoorName" : doorName
};
info1JsonObj.push(info1JsonElem);
cnt++;
if(cnt === rows.length) {
callback(null, info1JsonObj);
}
}
}
); // for the only door info based on door id
} // for each row of info1
db.close(); // why this finishes before the 2nd db.all
} ); // end of serialize
});
};
=>
【在 a9 的大作中提到】 : 试试这样? : const db = new sqlite3.Database("MyDB.sqlite3"); : db.all("select * from table1", rows => { : db.serialize(() => { : for(let i = 0; i < rows.length; i++) { : // get doorId : db.all('select * from table2 where ID=?', doorId, table2Rows => : { : myJsonObj.data.push(myJsonElem); : })
|
a9 发帖数: 21638 | 11 你得把db.close放到db.serialize的callback里面
one.
【在 w*s 的大作中提到】 : 大牛,this is the best i can get, : How to improve it please, basically i'm lost in the callback for the 2nd one. : Also the db.close() is always called before the 2nd query finishes, even i : have serialize(). : var getInfo1Db = function(callback) { : var db = new sqlite3.Database("DB.sqlite3"); : : var cnt = 0; : var info1JsonObj = []; : db.all("select * from Info1DB",
|
e*******o 发帖数: 4654 | 12 用python搞啊
你用node不是自找苦吃
one.
【在 w*s 的大作中提到】 : 大牛,this is the best i can get, : How to improve it please, basically i'm lost in the callback for the 2nd one. : Also the db.close() is always called before the 2nd query finishes, even i : have serialize(). : var getInfo1Db = function(callback) { : var db = new sqlite3.Database("DB.sqlite3"); : : var cnt = 0; : var info1JsonObj = []; : db.all("select * from Info1DB",
|
w*s 发帖数: 7227 | 13 上次好像不行,明天再试试
【在 a9 的大作中提到】 : 你得把db.close放到db.serialize的callback里面 : : one.
|