2

我正在开发一个最初为最近升级到 2.2.0 的 PhoneGap 1.0.0 编写的 iOS 应用程序,因此我可以将SQLitePluginSQLCipher一起使用。SELECT即使我知道那里有数据,我也遇到了从不返回结果的语句的问题。

这是纲要:

  1. 使用以下代码创建数据库:
    THDatabase.DatabaseConnection = sqlitePlugin.openDatabase(THDatabase.name, THDatabase.currentVersion, THDatabase.displayName, THDatabase.size);

    THDatabase.DatabaseConnection.transaction(THDatabase.CreateUsersTable, THDatabase.FatalErrorCallback);
    THDatabase.DatabaseConnection.transaction(THDatabase.CreateCentersTable, THDatabase.FatalErrorCallback);
    ...
  1. 一旦用户注册,Centers 和 Users 表就会插入数据。
  2. 当登录屏幕加载时,会在数据库中查询中心和用户。
    /* Centers */
    LoadCenters: function LoadCenters() {
        console.log("LoadCenters");
       THDatabase.DatabaseConnection.transaction(THDatabase.LoadCentersImpl, THDatabase.FatalErrorCallback);
        console.log('THDB.LoadCenters called from: ' + arguments.callee.caller.name);
    },

    LoadCentersImpl: function(tx) {
        console.log("Loading centers.");
        tx.executeSql('SELECT * FROM Centers', [], THDatabase.LoadCentersParse, THDatabase.RecoverableErrorCallback);
    },

    LoadCentersParse: function(tx, results) {
        console.log('parsing centers');
        var dataArray = [];
        var len = results.rows.length;
        ...
    },

    /* Users */
    LoadUsers: function LoadUsers() {
        console.info("THDB.LoadUsers");
    THDatabase.DatabaseConnection.transaction(THDatabase.LoadUsersImpl, THDatabase.FatalErrorCallback);
    },

    LoadUsersImpl: function (tx) {
        console.info("Loading users...");
    tx.executeSql('SELECT * FROM Users', [], THDatabase.LoadUsersParse, THDatabase.RecoverableErrorCallback);
    },

    LoadUsersParse: function (tx, results) {
        console.info('parsing users...');
        var dataArray = [];
        var len = results.rows.length;
        console.log(len);
        ...
    }
    ...

我遇到的问题是,LoadUsersImpl()运行后,LoadUsersParse()永远不会得到SELECT语句的结果。console.log 在“正在加载用户...”处停止。我仍然可以登录应用程序,但没有其他需要从数据库中读取的内容。

我尝试将调用包装LoadUsersParse()在一个匿名函数中,传递tx, results,这是行不通的。如果我 results通过,那么调用的结果会显示在控制台日志中,但它会在“解析用户...”出现后立即停止。

如果没有在 PhoneGap 中安装 SQLitePlugin,同样的代码也可以正常工作,但我无法弄清楚它可能导致问题的位置。

在“正在加载用户...”之后打开 DEBUG 会立即记录:

SQLitePlugin.backgroundExecuteSqlBatch: {"executes":[{"query":["BEGIN"],"path":"ThinkHealthDBs.db","callback":"cb55"},{"query":["SELECT * FROM Users"],"path":"ThinkHealthDBs.db","callback":"cb56"}]}

这是使用和不使用 SQLCipher 以及在 PhoneGap/Cordova 2.1.0 上的问题。

4

0 回答 0