Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript/Phonegap与SQLite插入错误?_Javascript_Sqlite_Cordova_Insert - Fatal编程技术网

Javascript/Phonegap与SQLite插入错误?

Javascript/Phonegap与SQLite插入错误?,javascript,sqlite,cordova,insert,Javascript,Sqlite,Cordova,Insert,我正在构建一个Phonegap应用程序,目前主要针对iOS 7+ 我有一个本地SQLite数据库,我正在从服务器复制它。一些表此时是空的,但它们并不总是空的。使用下面的代码时,不会填充result.insertId值,而只填充插入表中的第一行。在第一行之后,所有插入值都是正确的 db.transaction(function (tx1) { tx1.executeSql(insertSQL1, [arguments], function (t1, result1) {

我正在构建一个Phonegap应用程序,目前主要针对iOS 7+

我有一个本地SQLite数据库,我正在从服务器复制它。一些表此时是空的,但它们并不总是空的。使用下面的代码时,不会填充result.insertId值,而只填充插入表中的第一行。在第一行之后,所有插入值都是正确的

db.transaction(function (tx1) {
   tx1.executeSql(insertSQL1, [arguments],
      function (t1, result1) {
          if (result1 != null && result1.rowsAffected > 0) {
              logMessage("Result1:" + JSON.stringify(result1));
              $.each(UserSelectedArrayOfItems, function (index, value) {
              db.transaction(function (tx2) {
                    tx2.executeSql(insertSQL2, [result1.insertId, value],
                         function (t2, result2) {
                              if (result2 != null) {
                                  logMessage("Result2: " + JSON.stringify(result2));
                              }
                         },
                         function (t2, error) {
                              logMessage("There was an error: " + JSON.stringify(error));
                         });
                    });
               });
              << Do app Navigation if all was ok >> 
          }
      },
      function (t, error) {
           logMessage("Error: " + JSON.stringify(error));
      });
});
以前有人见过这种行为吗?我正在使用以下插件:

<gap:plugin name="com.millerjames01.sqlite-plugin" version="1.0.1" />

是的,我发现当您使用结果或行中的值时,最佳做法是首先将object的值求值到一个新变量,然后将新变量传递到另一个函数调用并在那里执行工作。作为对我的示例的更新:

db.transaction(function (tx1) {
   tx1.executeSql(insertSQL1, [arguments],
      function (t1, result1) {
          if (result1 != null && result1.rowsAffected > 0) {
              logMessage("Result1:" + JSON.stringify(result1));
              var newID = result1.insertId;
              $.each(UserSelectedArrayOfItems, function (index, value) {
                DoWork(newID, value);
               });
              << Do app Navigation if all was ok >> 
          }
      },
      function (t, error) {
           logMessage("Error: " + JSON.stringify(error));
      });
});


function DoWork(id, value){
   db.transaction(function (tx2) {
        tx2.executeSql(insertSQL2, [id, value],
             function (t2, result2) {
                  if (result2 != null) {
                      logMessage("Result2: " + JSON.stringify(result2));
                  }
             },
             function (t2, error) {
                  logMessage("There was an error: " + JSON.stringify(error));
             });
        });
    }

您需要添加任何支票或退货,以便确认一切按预期进行。但这正是我修复它的全部要点。

我注意到您在外部tx.executeSql调用中使用了db.transaction。您可以在外部调用中使用tx.executeSql。也许这就是问题所在。这个问题解决了吗?
db.transaction(function (tx1) {
   tx1.executeSql(insertSQL1, [arguments],
      function (t1, result1) {
          if (result1 != null && result1.rowsAffected > 0) {
              logMessage("Result1:" + JSON.stringify(result1));
              var newID = result1.insertId;
              $.each(UserSelectedArrayOfItems, function (index, value) {
                DoWork(newID, value);
               });
              << Do app Navigation if all was ok >> 
          }
      },
      function (t, error) {
           logMessage("Error: " + JSON.stringify(error));
      });
});


function DoWork(id, value){
   db.transaction(function (tx2) {
        tx2.executeSql(insertSQL2, [id, value],
             function (t2, result2) {
                  if (result2 != null) {
                      logMessage("Result2: " + JSON.stringify(result2));
                  }
             },
             function (t2, error) {
                  logMessage("There was an error: " + JSON.stringify(error));
             });
        });
    }