【问题标题】:read-only sqlite database with temporary changes具有临时更改的只读 sqlite 数据库
【发布时间】:2009-08-24 09:41:46
【问题描述】:

我有一个 sqlite 数据库,我希望它保持只读状态,不对数据库文件进行任何写操作。

有没有办法对数据库进行临时修改,而不会将它们永久刷新到磁盘?

现在我正在以一种解决方法来执行此操作,将临时数据存储在与主数据库文件具有相同架构结构的内存数据库中。这种方法的问题在于它增加了代码复杂性,因为我必须在两个数据库上运行所有查询。

理想情况下,该问题的解决方案会将额外的临时数据视为主数据库的一部分,但不会实际将其提交到磁盘。

【问题讨论】:

    标签: sqlite


    【解决方案1】:

    因为SQLite is transactional 不需要COMMIT 事务就足够了(SQLite 将在连接关闭时自动回滚)。您应该首先使用BEGIN 语句将自动提交设置为关闭。

    【讨论】:

      【解决方案2】:

      您可以创建一个temporary table,当连接关闭时,它将自动从数据库中删除。

      【讨论】:

        【解决方案3】:
        BEGIN IMMEDIATE TRANSACTION;
        do a bunch of stuff;
        ROLLBACK TRANSACTION;
        

        如果另一个线程正在从数据库中读取,则ROLLBACK 将失败并显示SQLITE_BUSY,但您可以在挂起的读取完成后再次执行它。如果另一个线程想要写入数据库,那么他们将锁定您的锁。

        现在,以这种方式使用事务有点有趣,在您和数据库之间建立一个程序化的 ORM 样式层,该层直接与您的本机对象一起工作并保持您在内存中的临时更改?

        p>

        我的意思是,如果您不想更改数据库,也许您需要另一个代码层,而不是数据库功能?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-10-25
          • 2014-04-18
          • 2010-12-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多