Cordova SQLite,从服务器推送值并插入SQLite数据库

时间:2017-08-07 08:10:22

标签: android sqlite cordova

当用户在应用程序上时,我的混合应用程序正在将数据从服务器推送到cordova应用程序。从我的服务器,我的JSON中有2000个数据。我成功地将2000个数据插入到我的SQLite数据库中。但是,我意识到该程序插入了与服务器中最后一个数据相同的2000个数据。以下是我的代码。

      $http.get("http://131.4.44.69/php3/fetchSAPInfo.php?key=" + lastSAPOID).success(function (data){
              alert(lastSAPOID);
              if(data == 1){
                  alert("data is up to date");
              }else{
                  alert("data is updating......");

                  var i;
                  for(i=0; i<data.length; i++){
                      var SAP_OID =  data[i].SAP_OID;
                      var SAP_Asset = parseInt(data[i].SAP_Asset);
                      var SAP_Description =  data[i].SAP_Description;

                      db.transaction(function(tx) {
                          alert(SAP_Asset);
                          tx.executeSql('INSERT INTO SAPInfo VALUES (?,?,?)', [SAP_OID, SAP_Asset , SAP_Description]);

                      }, function(error) {
                          console.log(error);
                      }, function() {
                          alert("insert successfully");
                      })
                }
            }              
    }).then (function (response){
          alert("done and finished");
    });
我意识到代码,然后转到函数首先只运行db.transaction()函数。因此,程序不会相应地获取JSON数据。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

我花了一整天的时间来弄清楚问题是什么。我的for循环必须放在db.transaction()函数中。这是异步编程的问题。以下是我的答案。

      $http.get("http://131.4.44.69/php3/fetchSAPInfo.php?key=" + res).success(function (response){
              if(response == 1){
                  console.log("data is up to date.......");
              }else{
                  console.log("data is updating.........");

                  db.transaction(function(tx) {
                   var i;
                       for(i=0; i<response.length; i++){
                            var SAP_OID =  response[i].SAP_OID;
                            var SAP_Asset = parseInt(response[i].SAP_Asset);
                            var SAP_Description =  response[i].SAP_Description;

                            tx.executeSql('INSERT INTO SAPInfo VALUES (?,?,?)', [SAP_OID, SAP_Asset , SAP_Description]);
                       }
                   }, function(error) {
                          console.log(error);
                   }, function() {
                          console.log("insert successfully");
                   })
            }
    }).then (function (response){
          console.log("done and finished");
    });