issue with loop the select query in sqlite?

2019-09-01 01:29发布

I am trying to iterate an dynamic array as input for select query. The select query is not firing for all array elements. I wrote select query in for loop, the problem is loop is firing first and the select query is performing only for last element of array. may be this due to asynchronous function. How can I resolve this, My code is as follows,

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

Any suggestions,

1条回答
来,给爷笑一个
2楼-- · 2019-09-01 01:45

Try simplifying the code. I think the issue is having a for inside of a for with the same iterator name.

Here is an example of how I would try this:

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

Instead of looping through two sets of values, I have compiled the myLocation array into a string that can be used in an IN sql statement. This will return all results for the myLocation array and then iterate through them for processing.

This cuts down a lot of processing and also creates less fail points in the function.

查看更多
登录 后发表回答