Javascript SQL插入循环
我试图向函数传递一个数组,该数组应该通过循环运行,并为每个递增的SQL语句调用db.transactionJavascript 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
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);
}
}