HTML5 SQLITE多次查询失败

时间:2016-01-11 05:55:05

标签: javascript html5 sqlite google-chrome

我正在使用在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);
    }
},

0 个答案:

没有答案