boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - sqlite3 db.close() called before db.serialized() finishes
相关主题
typedef and operator new problem
多线程优化求助! (转载)
怎么样实现fuzzy join
SQL add some columns into a table from another table (转载
error of sql query in MS Access database (转载)
Error of SQL query on IBM netezza SQL database from Aginity (转载)
qsub callback question
同步编程真郁闷
Node.js 并发模型相关:closure 中 access mutable variable
尼玛 callback 真是反人类
相关话题的讨论汇总
话题: doorid话题: err话题: var话题: function话题: select
进入Programming版参与讨论
1 (共1页)
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.

1 (共1页)
进入Programming版参与讨论
相关主题
尼玛 callback 真是反人类
Please recommend embedded RDBMS for .Net 2.0 (转载)
请问sql语句能不能实现这样的功能
构建一个快速查询字典(数据结构题)?
请帮忙看看这个小程序
求助:expected class name before "(" token
一个小问题
Project求建议
各种语言程序猿被鄙视级别排序 (转载)
有没有简化的xml? (转载)
相关话题的讨论汇总
话题: doorid话题: err话题: var话题: function话题: select