在打开另一个连接中的事务时写入SQLite DB

时间:2015-02-19 09:10:01

标签: sqlite firefox-addon

我有一个Firefox插件,它使用SQLite DB存储数据(借助于mozIStorageConnection的包装.Addon有一个选项窗口,用于操作大多数附加数据。

用户要求添加机会取消他们在该窗口中所做的更改。为了在DB中为数据实现这一点,我使用了窗口的“load”事件处理程序,如下所示:

window.addEventListener('load', function() {
    //...
    // conn is mozIStorageConnection instance.
    conn.beginTransaction();
    document.documentElement.addEventListener('dialogaccept', function(){
        conn.commitTransaction();
    }, false);
    document.documentElement.addEventListener('dialogcancel', function(){
        conn.rollbackTransaction();
    }, false);
};

目标是在窗口关闭时使用“确定”按钮提交对数据库的更改,并在使用“取消”按钮关闭窗口时将其回滚。

我的插件使用JS代码模块为所有FF窗口使用单个背景上下文。因此,可以使用其他FF窗口来使用插件并对其数据进行一些更改。 FF窗口中内置了其他UI元素,其中包含用于修改插件数据的叠加层。但是当我在选项窗口中使用提交/回滚方案时,它也会影响使用加载项UI的其他元素所做的更改。

理想的解决方案是与DB建立两个独立的连接。其中一个将由负责选项窗口更改的模块使用,此连接的操作可以取消。另一个将处理在不会回滚的覆盖元素中进行的修改。但SQLite不支持多个编写器,因此这种方法不起作用。

是否可以实现我想要实现的功能?我需要能够为所有操作使用相同的DB,但其中一些(在选项窗口中发生的那些)应该是可取消的。

0 个答案:

没有答案