我有一个sqlite数据库,我想保持只读,而不对数据库文件进行任何写操作。
有没有办法对数据库进行临时修改,而不是永久地将它们刷新到磁盘上?
现在我通过将临时数据存储在与主数据库文件具有相同模式结构的内存数据库中,以变通方式执行此操作。这种方法的问题在于它增加了代码复杂性,因为我必须在两个数据库上运行所有查询。
理想情况下,问题的解决方案会将附加临时数据视为主数据库的一部分,但实际上并未将其提交到磁盘。
答案 0 :(得分:2)
因为SQLite is transactional它不足以COMMIT
事务(SQLite将在连接关闭时自动回滚)。您应首先使用BEGIN
语句将autocommit设置为off。
答案 1 :(得分:1)
您可以创建一个temporary table,当连接关闭时,它将自动从数据库中删除。
答案 2 :(得分:1)
BEGIN IMMEDIATE TRANSACTION;
do a bunch of stuff;
ROLLBACK TRANSACTION;
如果另一个线程正在从数据库中读取,那么ROLLBACK
将以SQLITE_BUSY
失败,但您可以在挂起的读取完成后再次执行它。如果另一个线程想要写入数据库,那么它们就会锁定。
现在,以这种方式使用事务有一些有趣的事情,如何在您和直接使用本机对象的数据库之间建立编程的ORM样式层并保持内存中的临时更改?
我的意思是,如果您不想更改数据库,可能需要另一个代码层,而不是数据库功能?