【问题标题】:Error in retrieving values from SQlite DB from phoneGap从 phoneGap 从 SQlite DB 检索值时出错
【发布时间】:2012-10-20 12:03:24
【问题描述】:
function populateDB(tx)
{
    tx.executeSql('DROP TABLE IF EXISTS test');
    tx.executeSql('CREATE TABLE IF NOT EXISTS test(course TEXT, grade INTEGER)');
    tx.executeSql('INSERT INTO test(course,grade) VALUES ("Geography, World",90)');
    tx.executeSql('INSERT INTO test(course,grade) VALUES ("Health",92)');
    tx.executeSql('INSERT INTO test(course,grade) VALUES ("Literature, English",91)');
    tx.executeSql('INSERT INTO test(course,grade) VALUES ("Math 201",85)');
    tx.executeSql('INSERT INTO test(course,grade) VALUES ("Science 202",95)');
}

function queryDB(tx)
{
    tx.executeSql('SELECT * FROM test',[],querrySuccess,errorCB);
}

function querrySuccess(tx,results)
{
    var len = results.rows.length;
    alert("test TABLE: "+ len +"row(s) found");
    for(var i=0;i<n;i++)
    {
        console.log("Row = " + i + " COURSE = " + results.rows.item(i).course + " GRADE =  " + results.rows.item(i).grade);
    }
}

function errorCB(err)
{
    alert("Error processing SQL"+err.code);
}

function successCB()
{
    alert("Success!");
}

function create_database()
{
    var db = window.openDatabase("Database","1.0", "Demo DB", 200000);
    db.transaction(populateDB,errorCB,successCB);
    db.transaction(queryDB,errorCB);
}

在上面的代码中,我正在创建一个名为 test 的新数据库。当我的 html 表单加载时,函数 create_database() 被调用。我的问题是,它显示了显示行数的警报,但随后它给出了一个警报“错误处理 SQL”,即它被重定向到 errorCB 函数。是吗?我做错了吗? 提前致谢

【问题讨论】:

    标签: javascript sqlite cordova


    【解决方案1】:

    我会仔细查看您的代码,但首先您的表中没有任何主键。也许你可以测试类似的东西:

    "CREATE TABLE IF NOT EXISTS test(ID INTEGER PRIMARY KEY AUTOINCREMENT, course TEXT, grade INTEGER)"
    

    【讨论】:

    • 为了什么?我粘贴的代码只是一个示例代码,我只是想看看数据库集成如何与 PhoneGap 一起工作,我尝试按照您的建议进行操作。它只是不起作用
    【解决方案2】:
    use in callback function like this.
    
    tx.executeSql("CREATE TABLE IF NOT EXISTS test(ID INTEGER PRIMARY KEY AUTOINCREMENT, course TEXT, grade INTEGER)",[], function (tx, results) {
           tx.executeSql('INSERT INTO test(course,grade) VALUES ("Geography, World",90)');
           tx.executeSql('INSERT INTO test(course,grade) VALUES ("Health",92)');
           tx.executeSql('INSERT INTO test(course,grade) VALUES ("Literature, English",91)');
           tx.executeSql('INSERT INTO test(course,grade) VALUES ("Math 201",85)');
           tx.executeSql('INSERT INTO test(course,grade) VALUES ("Science 202",95)');
    
           tx.executeSql('SELECT * FROM test',[],function(result){
    
    
           },function(error) {
               alert("erorr..." + error);
           });
    });
    

    【讨论】:

      【解决方案3】:

      这是因为db.transaction 调用是异步的。您试图在前一个事务创建表和插入数据完成之前从数据库中读取数据。您应该在第一个事务完成后触发第二个事务

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多