我是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只在一个交易中。你们有没有人对如何实现这个有任何想法?如果不是,我需要修改我的整个数据模型以满足此要求。
答案 0 :(得分:0)
保存点必须嵌套在单个事务中。 提交事务后,其包含的保存点也无法回滚。
您必须按如下方式重新组织代码:
db.transaction(function(tx) {
tx.executeSql('SAVEPOINT XXX', []);
tx.executeSql('INSERT INTO ...', []);
tx.executeSql('RELEASE XXX', []);
});
如果您不能将这些语句作为同一事务的一部分,则不能依赖数据库的事务/保存点功能。 您已实现自己的撤消机制并将必要的信息添加到数据库中。