【问题标题】:issue with loop the select query in sqlite?在sqlite中循环选择查询的问题?
【发布时间】:2014-04-21 14:35:59
【问题描述】:

我正在尝试迭代一个动态数组作为选择查询的输入。选择查询并未针对所有数组元素触发。我在 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;
    }
  });
 });
 }
}

任何建议,

【问题讨论】:

    标签: javascript arrays sqlite cordova asynchronous


    【解决方案1】:

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

    以下是我将如何尝试的示例:

    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 数组编译成一个可以在IN sql 语句中使用的字符串。这将返回 myLocation 数组的所有结果,然后遍历它们进行处理。

    这减少了很多处理,也减少了函数中的故障点。

    【讨论】:

    • 会尽力让您知道。 :)
    • 我没有收到任何警报,我需要更改查询吗?字符串将如何迭代?
    • 更新了答案。假设会有多个结果,不应该发出警报,改为console.log。另外,我假设由于您之前进行了迭代,因此传入了多个位置,此代码将创建一个字符串以在 IN 语句中使用,该语句用于根据信息列表查找记录.
    • 它也不会在控制台中打印。有没有办法在不同的输入上迭代选择查询
    猜你喜欢
    • 2013-03-24
    • 2014-10-13
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多