【问题标题】:webSQL transactions with JayData使用 JayData 的 webSQL 事务
【发布时间】:2012-10-23 18:18:08
【问题描述】:

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

by V3nom » 2012 年 10 月 23 日星期二下午 2:06

我很难在 JayData 中找到有关 websql 事务的信息。谁能给个提示或链接?

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

【问题讨论】:

    标签: javascript web-sql jaydata


    【解决方案1】:

    以与存储无关的方式支持事务并不是一件容易的事情。因此,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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多