这个问题来到了JayData论坛,但我决定在这里分享,因为这是一个有趣的话题,也许其他人也可以从中受益。
通过V3nom»2012年10月23日,星期二2:06 pm
我很难在JayData中找到有关Websql事务的信息。任何人都可以给出提示或链接吗?
http://jaydata.org/forum/viewtopic.php?f=3&t=101&sid=8accd7bf5bed872b6e88d36004a280c5
最佳答案
以存储不可知的方式来支持事务并不是一件容易的事。因此,没有JayData的显式事务管理,而是可以使用EntityContext的隐式“全有或全无”行为。关于webSQL,每个增量包(即:多个add/update
项目和最后一个saveChanges()
)都在同一webSQL事务中运行。如果在保存任何项目期间发生错误,则将回滚所有先前的插入/更新。
一个非常简单的示例演示了这一操作:以下代码将两个项目插入表中,并创建重复的键错误方案。最终结果是,即使第二次插入被拒绝重复,表中也没有行。
$data.Entity.extend("item", {
ID: { key: true, computed: true, type: 'int' },
data: { type: 'string' }
});
$data.EntityContext.extend("ItemsContainer", {
items: { type: $data.EntitySet, elementType: item }
});
var offlinedb = new ItemsContainer({
name: 'sqLite',
databaseName: 'itemdb'
});
function createLocalData() {
offlinedb.items.add({ data: 'apple' });
offlinedb.items.add({ data: 'orange', ID:1 });
offlinedb.saveChanges(
function () {
}
);
}
这样可以创建程序化的回滚,您可以挂钩集合和上下文级别的事件处理程序,并在其中引发异常。在此处阅读更多信息:http://jaydata.org/blog/entitycontext-and-entityset-scoped-event-handlers-in-jaydata-1.2
关于javascript - JayData的WebSQL事务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13036693/