微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 使用循环将行添加到sqlite数据库(Phonegap)

我创建了一个小的Phonegap应用程序,通过XML从Ajax调用获取新闻数据.这很好,但我想将数据存储在数据库表中,以便离线阅读新闻.

因此,当Ajax回调循环遍历数据时,我用它填充一个全局新闻对象,然后调用一个函数来检查数据是否已经存储在数据库中.如果没有,则应将其插入数据库新闻表中.

问题是在事务中将新闻存储在表中,似乎我的新闻对象不再存在,因为我收到了消息:

Uncaught TypeError: Cannot read property ‘title’ of undefined in …

那么我怎样才能确保这项工作呢?这是我选择新闻的部分的代码,并想检查它是否已经存在:

//  Check if a news from the internet already exists in the database; If not, insert it
function checkNewsInDB(){
    db.transaction(function(tx){
        tx.executesql("SELECT * FROM NEWS", [], checkSuccess, dbErrorCB);
    }, dbErrorCB, dbSuccessCB);
}

//  Result Callback from the News Check
function checkSuccess(ctx, result){
    var len = result.rows.length;
    var found = false;
    for(var n = 0; n < newsContainer.length; n++){
        for(var r = 0; r < len; r++){
            if(result.rows.item(r).n_title == newsContainer[n].title 
               && result.rows.item(r).n_pubdate == newsContainer[n].pubdate){
                found = r;
            }
        }
        if(found == false){
            db.transaction(function(tx){
                tx.executesql("INSERT INTO NEWS (n_title, n_link, n_creator, n_pubdate, n_description) VALUES (?,?,?,?,?)", [newsContainer[n].title, newsContainer[n].link, newsContainer[n].creator, newsContainer[n].pubdate, newsContainer[n].description], insertSuccess, dbErrorCB);
            }, dbErrorCB, dbSuccessCB);
        } else {
            found = false;
        }
    }
}

newsContainer IS填充了几行数据,我已经检查过了.如果有人能帮助我理解为什么这不起作用,我会很高兴.

提前致谢!

问候,

贝恩德

解决方法:

db.transaction是异步的 – 当executesql实际运行时,n已经增加到循环结束.

不要为每个项目创建新事务,而是尝试在事务函数内部移动循环.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐