sqlite中select查询的循环问题

issue with loop the select query in sqlite?

本文关键字:循环 问题 查询 select sqlite      更新时间:2023-09-26

我正在尝试迭代一个动态数组作为select查询的输入。没有为所有数组元素激发选择查询。我在for循环中编写了选择查询,问题是循环首先启动,而选择查询只对数组的最后一个元素执行。这可能是由于异步功能。我该如何解决这个问题,我的代码如下,

function sendCategoryDetailsNew(myLocation)
{
     var myLocationcoordinates = new Array();
     var db = window.sqlitePlugin.openDatabase({name: "MYDB"});
    for (var i = 0; i < myLocation.length; i++)
    {
    var locationName = myLocation[i];
    alert(locationName);
    db.transaction(function (tx) {
   tx.executeSql("select Coordinates from Locationlog WHERE Location = '"+locationName+"';", [], function (tx, res)
  {
   for (var i = 0; i < res.rows.length; i++)
   {
      alert("Location : "+locationName+ " Latlongs :"+ res.rows.item(i).Coordinates);
      myLocationcoordinates[i] = res.rows.item(i).Coordinates;
    }
  });
 });
 }
}

任何建议,

尝试简化代码。我认为问题是在具有相同迭代器名称的for内部有一个for

下面是一个我将如何尝试的例子:

function sendCategoryDetailsNew(myLocation)
{
    var myLocationcoordinates = new Array();
    var db = window.sqlitePlugin.openDatabase({name: "MYDB"});
    var locationsList = "''" + myLocation.join("'',''") + "''";
    db.transaction(function (tx) {
        tx.executeSql("SELECT Location, Coordinates FROM Locationlog WHERE Location IN (?)", locationsList, function(tx, res) {
            for (var i = 0; i < res.rows.length; i++)
            {
                console.log("Location : " + res.rows.item(i).Location + " Latlongs : " + res.rows.item(i).Coordinates);
                myLocationcoordinates[i] = res.rows.item(i).Coordinates;
            }
        });
    }
}

我没有循环使用两组值,而是将myLocation数组编译成一个可以在INsql语句中使用的字符串。这将返回myLocation数组的所有结果,然后对它们进行迭代处理。

这减少了大量的处理,也减少了函数中的失败点。