我正在使用在Chrome浏览器上运行的HTML 5 SQLITE开发APP。 我有一个SQL文件,其中包含create table的查询和插入表。文件大小从30 MB到100 MB不等。 以下是从文件中读取查询并在浏览器中执行查询的代码。
我首先在单个查询中执行一堆查询,假设55个查询一次执行。当sql文件大小约为40 MB时,这可以正常工作,对于某些大文件大小也可以正常工作,但对于某些文件大小,它会失败。 所以我想分裂所有查询并一个接一个地循环执行它们。所以55个查询单独执行。但是循环在两者之间停止而没有任何错误,并且不执行进一步的查询。可能是什么问题?
chrome或SQLite中的查询执行是否有限制?或者sql文件大小的限制?
$.ajax({
url:'http://localhost/myfolder/85-singapore.sql',
type: "GET",
contentType: "application/json",
dataType: "jsonp",
jsonpCallback:"my",
success: function(obj){
html5sql.process(
"DROP TABLE IF EXISTS poi_data;DROP TABLE IF EXISTS city_data;DROP TABLE IF EXISTS event_data",
function(){
var queryArr = obj.sql.split("^::^");
console.log("total Queries");
console.log(queryArr.length);
for(var i=0; i<queryArr.length;i++){
var islast = false;
if(i+1 == queryArr.length){ islast = true; }
console.log(i);
var query = queryArr[i];
myAPP.loadSQL(query,islast);
}
},
function(error, failingQuery){ //Failure
console.log("DROP SQL Error");
console.log(error.message);
if(error.message.indexOf("no such table") != -1){
var queryArr = obj.sql.split("^::^");
console.log("total Queries");
console.log(queryArr.length);
for(var i=0; i<queryArr.length;i++){
var islast = false;
if(i+1 == queryArr.length){ islast = true; }
//myAPP.loadSQL(queryArr[i],islast);
}
}
}
);
},
error:function(err){
console.log(err);
}
});
loadSQL: function(sql,isLast){
try{
console.log(sql);
var startTime = new Date();
html5sql.process(
sql,
function(){ //Success
console.log("LOAD SQL success");
var endTime = new Date();
console.log("Table with entries created in: " + ((endTime - startTime) / 1000) + "s");
myAPP.removeLoading();
if(isLast){
myAPP.sqlLoaded = true;
}
if(myAPP.sqlLoaded){
myAPP.init();
myAPP.fetchAll();
}
},
function(error, failingQuery){ //Failure
console.log("LOAD SQL Error");
myAPP.removeLoading();
$("#results").text("Error: " + error.message);
console.log(failingQuery);
}
);
}catch(err){
console.log("loadSQL catch--"+err);
}
},