与JayData的webSQL事务

时间:2012-10-23 18:18:09

标签: javascript web-sql jaydata

这个问题来自JayData论坛,但我决定在这里分享,因为这是一个有趣的话题,也许其他人也可以从中受益。

by V3nom»Tue Oct 23,2012 2:06 pm

我很难在JayData中找到有关websql事务的信息。任何人都可以给出提示或链接吗?

http://jaydata.org/forum/viewtopic.php?f=3&t=101&sid=8accd7bf5bed872b6e88d36004a280c5

1 个答案:

答案 0 :(得分:3)

以存储无关的方式支持事务并不容易。因此,JayData没有明确的事务管理,而是可以使用EntityContext的隐式“全有或全无”行为。关于webSQL,每个delta包(即:一些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