• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

SQLite journal 文件_MySQL

mysql 搞代码 4年前 (2022-01-09) 15次浏览 已收录 0个评论

生成原因

任何一次的数据库修改操作都会产生journal文件,但是如果按照正常的流程执行完,该文件就会自动删除,几乎是一瞬间,所以我们看不到,如果我们看到该文件,而程序已经执行完了,说明事务回滚了!!

出现journal文件原因有如下的情况:

1)

begin transaction;

commit transaction;

没有配对,导致-journal文件生成

执行了 begintransaction;

没有执行 committransaction;

2)

在使用sqlite3_prepare(db,sql, strlen(sql), &stmt, &tail);后,

必须使用sqlite3_finalize(stmt);将stmt释放。

对于sqlite中的其他各种匹配用法要对应。

解决方案:

1)

你产生.db-journal 是因为是因为你的事务回滚了.(原因可能很多 )

一般在下一个数据查询操作时候就可以恢复.

你可以在你的数据库操作使用timeout这样预见忙 他会等timeout时间.

.db-journal文件产生的可以能性才小

journal暂存档

答案是用来Rollback ,换句话说,就是当数据写入数据库有失败动作时,透过journal档案予以复原到未更动前(原始)数据,来确保数据完整与一致性。如果在每次写入的时间很长或频繁的进行数据库写入情况下,因系统(主机)电力不稳或突然断电时,那么下次重新启动,而journal档案若存在,则在开启SQLite数据库时,若发现有journal档案的存在,便会对数据库做Rollback 动作(还原)(详细内容:http://www.sqlite.org/atomiccommit.html)。但是有时候系统(主机)电力不稳或突然断电会导致journal档案损毁,因而造成SQLite数据库无法开启%5B问题1%5D。必须(手动)删除journal档案,SQLite数据库才能再度开启。

目前所知的方法有两种:

第一种方法:

在系统开机后第一次开启或每一次使用SQLite数据库时,先检查是否已经存在journal档案了,如果是则透过程序自动去删除该journal档案。

但是这有个问题,因为自动删除该journal档案,导致没有Rollback (还原)作用,无法保障数据完整与一致来2源gaodaima#com搞(代@码&网性。缺点二:有时候会发生程序无法自动删除(如:journal档案严重损毁),而导致上面的问题(无法开启数据库)[问题1]再度发生。

第二种方法:

使用”PRAGMAjournal_mode = OFF”指令,这个指令能关闭自动产生journal暂存档动作。

但是如此一来当在写入数据库的过程,一旦发生意外状况,将会导致SQLite数据库无法保障数据完整与一致性。缺点二:journal_mode设定为OFF时,无法使用交易模式(Transaction)进行操作。

第二种方法的缺点二在如果需要使用交易模式(Transaction)进行操作时,可以透过”PRAGMA journal_mode = DELETE”指令,修改回原本的journal模式(journal_mode),就可以使用交易模式(Transaction)。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:SQLite journal 文件_MySQL

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址