2014-03-31 30 views
0

我是phonegap和Sqlite開發的新手。我的要求是撤消交易或多筆交易。PhoneGap - Sqlite - SAVEPOINT

我可以使用SAVEPOINT來實現嗎?這是僞代碼。 。

db.transaction(function (transaction) { 
     transaction.executeSql('SAVEPOINT XXX;', 
      [], 
      nullHandler, 
      errorHandler); 
    }); 
db.transaction(function (transaction) { 
     transaction.executeSql('INSERT INTO .....;', 
      [], 
      nullHandler, 
      errorHandler); 
    }); 
db.transaction(function (transaction) { 
     transaction.executeSql('RELEASE XXX;', 
      [], 
      nullHandler, 
      errorHandler); 
    }); 

我也準備好SAVEPOINT只在一個事務中。你們中有人有任何想法如何實現這一點?如果沒有,我需要重新整理我的整個數據模型來解決這個需求。

回答

0

保存點必須嵌套在單個事務中。 一旦事務被提交,其包含的保存點也不能回滾。

你必須按如下方式重新組織代碼:

db.transaction(function(tx) { 
    tx.executeSql('SAVEPOINT XXX', []); 
    tx.executeSql('INSERT INTO ...', []); 
    tx.executeSql('RELEASE XXX', []); 
}); 

如果你不能讓這些語句在同一個事務的一部分,你不能依賴於數據庫的事務/保存點的功能。 您已實現自己的撤消機制並將必要的信息添加到數據庫。

+0

我所有的插入操作都是用戶執行的不同操作,但以後用戶可以進入並取消他們所做的最新條目/條目。所以我不能將所有的DML操作捆綁到一個事務中。 – user2596892