这个问题来到了JayData论坛,但我决定在这里分享它,因为这是一个有趣的话题,也许其他人也可以从中受益。
由V3nom»2012年10月23日星期二下午2:06
我很难在JayData中找到关于websql事务的信息。有人能给出一个提示或链接吗?
http://jaydata.org/forum/viewtopic.php?f=3&t=101&sid=8accd7bf5bed872b6e88d36004a280c5
发布于 2012-10-24 02:27:02
在存储不可知的情况下,支持事务并非易事。因此,JayData没有显式的事务管理,您可以使用EntityContext的隐式“全有或全无”行为。对于webSQL,每个增量包(即:多个add/update项和末尾的一个saveChanges() )在相同的webSQL事务中运行。如果在保存任何项的过程中发生错误,则将回滚之前的所有插入/更新。
一个非常简单的示例实际说明了这一点:下面的代码将两个项插入到一个表中,并创建了一个重复的键错误场景。最终结果是,即使第二个insert被拒绝,表中也不会有任何行是重复的。
$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 () {
}
);
}这将创建编程式回滚,您可以挂钩set和context级别的事件处理程序,并在其中抛出异常。点击此处阅读更多信息:http://jaydata.org/blog/entitycontext-and-entityset-scoped-event-handlers-in-jaydata-1.2
https://stackoverflow.com/questions/13036693
复制相似问题