尝试使用each()从Json插入websql表

时间:2015-02-24 14:17:27

标签: jquery json cordova web-sql each

我正在开发一个phonegap应用程序,必须与远程mysql服务器同步。

我使用getJson()加载一个json文件,并将这些行插入到websql数据库中。我的问题是只有第一行插入websql DB。我在Json文件中有两行。

这是我的功能:

function loadJson(){


$.getJSON( "http://localhost:8888/results.json", function( data ) { 

    $.each(data, function(i, item) { 

        var title=data[i].title;           
        var content=data[i].content;            
        var imgurl=data[i].imgurl;
        imgName = imgurl.substring(imgurl.lastIndexOf('/'))
        db.transaction(function (transaction) {
            console.log('we insert' + title); // It works, display me the two different title
            transaction.executeSql('INSERT INTO projets (title, content, imgurl) VALUES ("' + title + '","' + content + '", "' + imgurl + '" );'); //Only the first row is inserted
        });

    });
});

我的代码可能很糟糕,我仍然是“新手”。无论如何,提前谢谢你,抱歉我的英语不好。

1 个答案:

答案 0 :(得分:1)

事务意味着一次处理对数据库的许多请求。尝试对所有SQL语句使用一个事务,而不是启动多个事务。

示例(可能需要一些改进):

function loadJson(){
    $.getJSON( "http://localhost:8888/results.json", function( data ) { 
        db.transaction(function (transaction) {
            var len = data.length;
            for(var i = 0; i < len; i++) {
                var title=data[i].title;           
                var content=data[i].content;            
                var imgurl=data[i].imgurl;
                imgName = imgurl.substring(imgurl.lastIndexOf('/'));
                console.log('we insert' + title); // It works, display me the two different title
                transaction.executeSql('INSERT INTO projets (title, content, imgurl) VALUES (?,?,?)',[title, content, imgurl]);
            }
        });
    });
}

启动事务时,数据库/表将锁定该实例。如果您调用多个事务,则第一个锁定所有内容,其余事件无法完成。

此外,我已将.each替换为for,因为使用for优于.each

可获得极佳的性能提升