Cordova SQL - 从多个表中选择数据

时间:2014-03-03 04:05:24

标签: javascript sqlite cordova

我的SQLite数据库中有几个表,每个表都有一个相互联系的外键。

让我们说结构如下:

Person
=========
Id
Name

Income
=========
IncomeId
PersonId
Income

Contact
=========
ContactId
PersonId
ContactName

收入和联系人表中的PersonId是Person表的外键。

现在,当我想查询所有表中的数据时,首先我从Person中选择,然后在回调中,我将遍历数据,并从Income和{{中选择1}}为每个记录。我不能进行连接选择,因为数据不是强制性的,即对于一个人来说,它可能有收入而不是联系,反之亦然。

然而,当我尝试运行循环时,我发现结果始终是数据的最后一个实例。经过一些谷歌搜索后,问题似乎是我需要使用Closure。

我试图实现它但是很难,目前我的代码看起来像这样:

Contact

Cordova有多重选择指南吗?任何帮助是极大的赞赏。感谢。

1 个答案:

答案 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);
}

感谢。