1

由于某种原因,以下代码不起作用:

var users = window.SQLitePlugin.openDatabase("users","1.0","Demo",-1);
users.transaction(function(tx){
    KovarApp.lib.say("Transaction Started");
    var createString =  "CREATE TABLE IF NOT EXISTS 'users' ('id' integer(11) primary key, 'username' varchar(25),'password' varchar(100),'firstname' varchar(25),'lastname' varchar(25),'qdatabase' varchar(20),'ugroup' varchar(50),'status' varchar(50))";
    tx.executeSql(createString,[],function(tx,res){
        KovarApp.lib.say("Create Worked");
    },function(){
        KovarApp.lib.say("Create Failed");
    });

    var insertString = "INSERT INTO users (username,password,firstname,lastname,qdatabase,ugroup,status) values ('jktest','e10adc3949ba59abbe56e057f20f883e','Andrew','Rhyne','basictemplate','admin','yes')";
    tx.executeSql(insertString,[],function(tx,res){
        KovarApp.lib.say("Insert Worked");
    },function(){
        KovarApp.lib.say("Insert Failed");
    });

    var testString = "SELECT 1 FROM users WHERE username = 'jktest'";
    tx.executeSql(testString,[],function(tx,res){
        KovarApp.lib.say("res.rows.length: " + res.rows.length + " -- should be 1");
    });
    KovarApp.lib.say('Transaction Ended');
});

我的日志函数吐出事务已启动和事务已结束,但未针对单个查询触发回调。我正在使用 Brody 的 sqlite3 插件:https ://github.com/brodyspark/PhoneGap-SQLitePlugin-Android

这里的任何帮助都会很棒。我真的不知道我做错了什么,但它根本不起作用。作为旁注,他已指定对数据库大小没有任何限制,这由 -1 表示(表示没有大小限制)。

4

2 回答 2

2

所有回调函数都是异步执行的。在您的代码中,插入/选择命令在前面的命令完成之前启动,事务在各个命令完成之前结束。

将启动命令的代码移动到上一个命令的成功回调函数中。
换句话说,transactionandexecuteSql调用应该始终是其包含函数中的最后一条语句。

于 2012-12-10T18:43:56.390 回答
0

Brody 项目中的 Javascript 文件暂时依赖于平台。看起来最终会在 javascript 都可移植的地方进行抽象,但这就是问题所在 - 我在 Android 上运行了 JS 文件的 iOS 版本。呵呵

于 2012-12-10T21:38:43.710 回答