2

SQLCipherSQLitePluginを使用できるように、最近2.2.0にアップグレードされたPhoneGap1.0.0用に作成されたiOSアプリに取り組んでいます。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()の結果が得られないことです。SELECTconsole.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 /Cordova2.1.0で発生する問題です。

4

0 に答える 0