【问题标题】:PhoneGap - Sqlite - SAVEPOINTPhoneGap - Sqlite - SAVEPOINT
【发布时间】:2014-05-11 11:37:13
【问题描述】:

我是 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 只在一个事务中。你们中有人对如何实现这一点有任何想法吗?如果不是,我需要修改我的整个数据模型来满足这个要求。

【问题讨论】:

    标签: sqlite cordova transactions undo


    【解决方案1】:

    保存点必须嵌套在单个事务中。 一旦事务被提交,它包含的保存点也不能回滚。

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

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

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

    【讨论】:

    • 我的所有插入都是用户执行的不同操作,但稍后,用户可以进入并撤消他们所做的最新条目。所以我不能将所有 DML 操作捆绑到一个事务中。
    猜你喜欢
    • 2016-12-02
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多