Javascript sqlite中的select查询是否存在问题?
我试图迭代一个动态数组作为select查询的输入。没有为所有数组元素触发select查询。我在for循环中编写了select查询,问题是循环首先触发,select查询只对数组的最后一个元素执行。这可能是由于异步功能。如何解决这个问题,我的代码如下:Javascript sqlite中的select查询是否存在问题?,javascript,arrays,sqlite,cordova,asynchronous,Javascript,Arrays,Sqlite,Cordova,Asynchronous,我试图迭代一个动态数组作为select查询的输入。没有为所有数组元素触发select查询。我在for循环中编写了select查询,问题是循环首先触发,select查询只对数组的最后一个元素执行。这可能是由于异步功能。如何解决这个问题,我的代码如下: function sendCategoryDetailsNew(myLocation) { var myLocationcoordinates = new Array(); var db = window.sqlitePlugin
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;
}
});
});
}
}
函数sendCategoryDetailsNew(myLocation)
{
var myLocationcoordinates=新数组();
var db=window.sqlitePlugin.openDatabase({name:“MYDB”});
对于(变量i=0;i
如果有任何建议,请尝试简化代码。我认为问题是在具有相同迭代器名称的
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;
}
});
}
}
函数sendCategoryDetailsNew(myLocation)
{
var myLocationcoordinates=新数组();
var db=window.sqlitePlugin.openDatabase({name:“MYDB”});
var locationsList=“\'”+myLocation.join(“\',\'”)+“\'”;
数据库事务(功能(tx){
tx.executeSql(“选择位置,从位置日志中选择坐标,位置在(?)”,位置列表,函数(tx,res){
对于(var i=0;i
我没有循环遍历两组值,而是将myLocation
数组编译成一个字符串,该字符串可用于in
sql语句中的。这将返回myLocation
数组的所有结果,然后遍历它们进行处理
这减少了大量处理,也减少了函数中的失败点。将尝试让您知道。:)我没有收到任何警报,是否需要更改查询?字符串将如何迭代?更新的答案。假设有多个结果,则不应发出警报,更改为console.log
。另外,我假设由于您之前进行了迭代,所以传入了多个位置,这段代码将创建一个字符串,用于in
语句中的,该语句用于根据信息列表查找记录。它也不会在控制台中打印。有没有办法在不同的输入上迭代select查询