0

トランザクションを使用してデータベース操作を実行する、ローカル ストレージを備えた Phonegap 2.5 アプリケーションを開発しています。問題は、アプリケーションが時々、同じトランザクションに対してトランザクション コールバックが複数回呼び出される状態になることです。これは、トランザクションを実行する方法の例です (DbAccess の保存機能が呼び出された場合):

function DbAccess(db)
{
    this.db = db;

    this.save = function(data, callback)
    {
        alert('saving'); //called once
        this.db.transaction(function(tx){

            tx.executeSql('CREATE TABLE ...');
            tx.executeSql('DELETE FROM ...');
            tx.executeSql('INSERT INTO ...');

        }, function(error){ 
               //on error
               callback({
               "success" : false
               });
        }, function(){
               //on successs
               callback({
               "success" : true
               });
        });
    }
}

アプリケーションがこの状態になると、保存関数は 1 回だけ呼び出されますが (アラートは 1 回だけポップアップします)、コールバック関数は (成功時のエラー コールバック関数によって) 数回呼び出されます。アプリケーションが複数のデータベースを作成すると、これらのエラーが表示されると思われます。アプリケーションへのログインに使用するユーザー名に基づいた名前のデータベースを作成します (ユーザー名とインスタンス変数はユーザー入力です)。

var dbName = username + '_' + instance;
var db = window.openDatabase(dbName, "1.0", "OfflineData", 1000000);

アプリケーションデータを削除して再起動すると、問題はなくなります。なぜこれが起こるのか途方に暮れています。どんな助けでも大歓迎です。

4

1 に答える 1

0

IndexedDB ではなく websql です。

あなたの発見は phonegap のバグのようです。

でエラーと成功のコールバックをリッスンしてみてくださいexecuteSql。成功のコールバックをリッスンして、3 つのステップを順番に実行します。問題は解決するはずです。

複数のデータベースで問題ありません。

于 2013-06-21T03:04:57.317 に答える