PhoneGap - Sqlite - SAVEPOINT

时间:2014-03-31 22:17:53

标签: sqlite cordova transactions undo

我是phonegap和Sqlite开发的新手。我的要求是撤消交易或多个交易。

我可以使用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只在一个交易中。你们有没有人对如何实现这个有任何想法?如果不是,我需要修改我的整个数据模型以满足此要求。

1 个答案:

答案 0 :(得分:0)

保存点必须嵌套在单个事务中。 提交事务后,其包含的保存点也无法回滚。

您必须按如下方式重新组织代码:

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

如果您不能将这些语句作为同一事务的一部分,则不能依赖数据库的事务/保存点功能。 您已实现自己的撤消机制并将必要的信息添加到数据库中。