当应用程序转到后台时,iOS Phonegap sqlite数据库被锁定
现在我正在开发phonegap应用程序: 在iOS中,当应用程序转到后台时,sqlite db中的插入操作被锁定(在android中也是如此)。当应用程序运行时,数据库操作将顺利进行当应用程序转到后台时,iOS Phonegap sqlite数据库被锁定,ios,html,sqlite,cordova,Ios,Html,Sqlite,Cordova,现在我正在开发phonegap应用程序: 在iOS中,当应用程序转到后台时,sqlite db中的插入操作被锁定(在android中也是如此)。当应用程序运行时,数据库操作将顺利进行 为什么会发生这种情况,我该如何处理 我认为您已经使用了for循环进行插入,本质上是异步的Javascript 您需要以以下样式执行批处理sql查询,而不是使用for循环 db=window.openDatabase(“Demo”、“1.0”、“BusinessApp”,200000) insertIndex=0;
为什么会发生这种情况,我该如何处理 我认为您已经使用了for循环进行插入,本质上是异步的Javascript 您需要以以下样式执行批处理sql查询,而不是使用for循环 db=window.openDatabase(“Demo”、“1.0”、“BusinessApp”,200000)
insertIndex=0;
var insertCounter=0;
insertBatch=函数(数组、数组长度、表名、字段问题、cb){
日志(“插入记录:+insertCounter”);
if(插入索引<阵列长度){
数据库事务(功能(tx){
var sql='插入或忽略到'+tableName+'值'+fieldQuestions;
log(“sql:+sql”);
log(“sql:----------------”;
log(数组[insertIndex]);
tx.executeSql(sql,数组[insertIndex],
功能(发送、恢复){
insertIndex++;
控制台日志(“插入成功”);
insertBatch(数组、数组长度、表名、字段问题、cb);
},函数(){
控制台日志(“插入失败”);
});
});
}否则{
插入索引=0;
cb();
}
}
db.事务(填充B、错误CB、成功CB);
函数填充B(tx){
tx.executeSql('DROP TABLE IF EXISTS?',[“news”],function()){
console.log(“成功删除”)
},函数(){
console.log(“故障下降”)
});
tx.executeSql('CREATE TABLE IF NOT EXISTS news(新闻id整数、新闻标题文本、新闻内容文本));
}
函数errorCB(){
警报(“错误:Init.js ErrorCB”);
}
函数successCB(){
//警惕();
log('DB Created Success');
var dataArray=[]
推送([1,“一”,“第一条新闻内容”])
推送([2,“2”,“2新闻内容])
推送([3,“三”,“2新闻内容])
推送([4,“4”,“4新闻内容])
insertBatch(dataArray,dataArray.length,“新闻”,“(?,?,?)”,成功)
函数成功(){
console.log(“所有成功”)
}
}
因此,每个executeSQL函数都需要先前的executeSQL成功回调可能是因为iOS不支持多任务处理。当应用程序进入后台时,会暂停;不是在后台运行。而在安卓系统中,则有真正的多任务处理。我的应用程序在后台运行,并成功地收集了位置数据。但是后台的sqlite操作只会失败。
insertIndex = 0;
var insertCounter = 0;
insertBatch = function(array, arrayLength, tableName, fieldQuestions, cb) {
console.log("Inserting Record :" + insertCounter);
if (insertIndex < arrayLength) {
db.transaction(function(tx) {
var sql = 'INSERT OR IGNORE INTO ' + tableName + ' VALUES ' + fieldQuestions;
console.log("sql: " + sql);
console.log("sql:------------- ");
console.log(array[insertIndex]);
tx.executeSql(sql, array[insertIndex],
function(tx, res) {
insertIndex++;
console.log("Insert success");
insertBatch(array, arrayLength, tableName, fieldQuestions, cb);
}, function() {
console.log("Insert failure");
});
});
} else {
insertIndex = 0;
cb();
}
}
db.transaction(populateDB, errorCB, successCB);
function populateDB(tx) {
tx.executeSql('DROP TABLE IF EXISTS ?', ["news"], function() {
console.log("success drop")
}, function() {
console.log("failure drop")
});
tx.executeSql('CREATE TABLE IF NOT EXISTS news (news_id INTEGER,news_header TEXT,news_content TEXT)');
}
function errorCB() {
alert("Error: Init.js ErrorCB");
}
function successCB() {
//alert();
console.log('DB Created Success');
var dataArray = []
dataArray.push([1, "ONE", "First News Content"])
dataArray.push([2, "TWO", "2 News Content"])
dataArray.push([3, "THREE", "2 News Content"])
dataArray.push([4, "FOUR", "4 News Content"])
insertBatch(dataArray, dataArray.length, "news", "(?,?,?)", success)
function success() {
console.log("all success")
}
}