Javascript SQL插入循环

Javascript SQL插入循环,javascript,database,sqlite,loops,cordova,Javascript,Database,Sqlite,Loops,Cordova,我试图向函数传递一个数组,该数组应该通过循环运行,并为每个递增的SQL语句调用db.transaction function updateColorData (colorArray) { for (var i=0; i<colorArray.length; i++) { var sql = 'INSERT INTO SPColorData (color) VALUES (\''+colorArray[i]+'\')'; if (i < colo

我试图向函数传递一个数组,该数组应该通过循环运行,并为每个递增的SQL语句调用db.transaction

function updateColorData (colorArray) {
    for (var i=0; i<colorArray.length; i++) {
        var sql = 'INSERT INTO SPColorData (color) VALUES (\''+colorArray[i]+'\')';
        if (i < colorArray.length-1) {
            db.transaction(function (tx) {tx.executeSql(sql, [], gameOptionSuccess, errorCB)}, errorCB);
        } else {
            db.transaction(function (tx) {tx.executeSql(sql, [], colorDataQuery, errorCB)}, errorCB);
        }
    }
}
但是当我让数据库读回它收到的信息时,我得到了

['four', 'four', 'four', 'four']
我意识到像这样在一个循环中调用4个数据库事务不是最有效的方法,但我不确定为什么这样做不起作用,或者尝试其他什么方法


谢谢

在调用数据库函数之前,需要为
i
创建一个新的作用域;试试这个:

function updateColorData (colorArray) {
    for (var i=0; i<colorArray.length; i++) {
        (function(i){
            var sql = 'INSERT INTO SPColorData (color) VALUES   (\''+colorArray[i]+'\')';
            if (i < colorArray.length-1) {
                db.transaction(function (tx) {tx.executeSql(sql, [], gameOptionSuccess, errorCB)}, errorCB);
            } else {
            db.transaction(function (tx) {tx.executeSql(sql, [], colorDataQuery, errorCB)}, errorCB);
            }
        })(i);
    }
}
函数updateColorData(colorArray){

对于(var i=0;我能解释一下您使用哪个库从客户端执行查询吗?我正在使用SQLite和Cordova框架为iOS开发。这是您需要的信息吗?+(也称为:)谢谢。不过,你能解释一下
colorDataQuery
gameOptionSuccess
是做什么的吗?它们是回调函数。gameOptionSuccess现在是空的,但colorDataQuery只是调用一个Select查询,重新呈现我拥有的存储数据库数据的javascript数组。你能解释一下为什么这样做吗发布的示例将不会?尝试更深入地解释。
function updateColorData (colorArray) {
    for (var i=0; i<colorArray.length; i++) {
        (function(i){
            var sql = 'INSERT INTO SPColorData (color) VALUES   (\''+colorArray[i]+'\')';
            if (i < colorArray.length-1) {
                db.transaction(function (tx) {tx.executeSql(sql, [], gameOptionSuccess, errorCB)}, errorCB);
            } else {
            db.transaction(function (tx) {tx.executeSql(sql, [], colorDataQuery, errorCB)}, errorCB);
            }
        })(i);
    }
}