我的SQLite数据库中有几个表,每个表都有一个相互联系的外键。
让我们说结构如下:
Person
=========
Id
Name
Income
=========
IncomeId
PersonId
Income
Contact
=========
ContactId
PersonId
ContactName
收入和联系人表中的PersonId
是Person表的外键。
现在,当我想查询所有表中的数据时,首先我从Person
中选择,然后在回调中,我将遍历数据,并从Income
和{{中选择1}}为每个记录。我不能进行连接选择,因为数据不是强制性的,即对于一个人来说,它可能有收入而不是联系,反之亦然。
然而,当我尝试运行循环时,我发现结果始终是数据的最后一个实例。经过一些谷歌搜索后,问题似乎是我需要使用Closure。
我试图实现它但是很难,目前我的代码看起来像这样:
Contact
Cordova有多重选择指南吗?任何帮助是极大的赞赏。感谢。
答案 0 :(得分:0)
能够通过使用嵌套函数和闭包来完成这项工作。
需要注意的是,闭包需要应用于db.transaction函数,而不是仅应用于成功回调。
使用的代码结构:
//inside for loop of first select result
for (var i = 0; i < len; i++){
function buildSuccessCallback(current,profile){
return function(tx, result){
querySuccess(tx, result,current,profile);
};
}
function querySuccess(tx,result,currentIdx,profile){
//...perform logic
console.log('currentIdx: ' + currentIdx); //returning the correct value
console.log('current Id: ' + profile["IdAir"]); //returning the correct Id
}
db.transaction((function(i,profile){
return function(tx){
tx.executeSql(mySQL, [profile["IdAir"]], buildSuccessCallback(i,profile), errorCB);
};
})(i,profile), errorCB);
}
感谢。