Phonegapアプリ用にいくつかのDBアクションを開発しています。私はSQLiteのトランザクション機能をテストしていますが、理解できない点が1つあります。
1つのトランザクションの例を次に示します。
dbObj.dbConnection.transaction(function (tx) {
tx.executeSql('INSERT OR IGNORE INTO foo (id, text) VALUES (?, ?)', [6,"aaalabala6"], function(tx, results) {
document.write("make insert<br>");
}, function (tx, err){
alert(err.message);
});
tx.executeSql('CREATE TABLE foo (id unique, text)', [], function(tx, results) {
}, function (tx, err){
console.log(err.message); // here an error - table already exists
});
tx.executeSql('INSERT OR IGNORE INTO foo (id, text) VALUES (?, ?)', [7,"aaalabala7"], function(tx, results) {
document.write("make insert<br>");
}, function (tx, err){
alert(err.message);
});
});
テーブル"foo"がすでに存在するため、中央のSQLクエリがエラーをスローしています(ステートメントを準備できませんでした(1つのテーブルfooがすでに存在します))。問題は、なぜトランザクションがロールバックを行わないのかということです。エラー時にトランザクションのロールバックを強制することはできますか?
ステートメントにエラーがありますか?