トランザクションを使用してデータベース操作を実行する、ローカル ストレージを備えた 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);
アプリケーションデータを削除して再起動すると、問題はなくなります。なぜこれが起こるのか途方に暮れています。どんな助けでも大歓迎です。