查询使用SQLitePlugin返回空结果

时间:2012-11-08 17:51:46

标签: javascript ios sqlite cordova phonegap-plugins

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

这是纲要:

  1. 使用以下代码创建数据库:
  2.     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. 用户注册后,中心和用户表中插入了数据。
    2. 加载登录屏幕时,将查询中心和用户的数据库。
    3.     /* 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时,这是一个问题。

0 个答案:

没有答案