• 5831阅读
  • 7回复

sqllite数据库出现的问题 [复制链接]

上一主题 下一主题
离线charles_gz
 

只看楼主 倒序阅读 楼主  发表于: 2011-10-28
用qt自带的sqllite做数据操作,目前出现一个这样的问题:当设备强制断电的时候会在工程目录下产生db.db-journal文件,我的数据库文件名字是db。根据自己测试发现操作数据量大的时候强制使设备断电容易产生那样的文件。有的时候还不知一个。在网上搜索了一些资料但是都不是在qt下编程的所以没多大收获,但是了解到 那样的文件会在再次启动设备之后自动消失。但是我这不止一个!假如有3个那样的文件的话需要重启3次才可以对数据库操作。困扰很长时间了一直没能解决。望各位大侠帮小弟一把!谢谢 在线等待!! 急急急急急急急急急!!!!!!!

离线ppdayz

只看该作者 1楼 发表于: 2011-10-28
手动删除它?
离线charles_gz

只看该作者 2楼 发表于: 2011-10-28
回 1楼(ppdayz) 的帖子
这个办法我用过,在设备的启动脚本文件中用rm -fr db.db-j*来删除所有的 但是还是会提示图片:QQ截图20110921153001.png[删除]
这是设备重启后执行ls语句的提示信息。
即便是提示没有那些文件了,但是还是不能对数据库操作成功!再重启对应文件个数次就可以了。
离线charles_gz

只看该作者 3楼 发表于: 2011-10-28
回 1楼(ppdayz) 的帖子
这是我通过超级终端截取的图片
离线ppdayz

只看该作者 4楼 发表于: 2011-10-28
单个数据库文件中的提交
步骤如下:
(1) 获得共享锁。
SQLITE在更新数据库之前要先读数据库,所以要先获得共享锁。
SQLite的共享锁是针对操作系统缓存的,而非磁盘文件,进程消失或系统崩溃都会导致锁丢失。

(2) 读取数据
从磁盘读到操作系统缓存,再读到用户进程。

(3) 申请一个保留锁(Reserved Lock)
保留锁的作用是告诉数据库我要修改数据库了,其他事务不能获得保留锁。所以一个数据库只能有一个保留锁。保留锁可以和其他共享锁共存,都可以读取数据库。

(4)生成回滚日志文件(Rollback Journals log file)
将修改前的数据写到回滚日志文件中

(5)修改用户进程空间中的数据

(6)将回滚日志文件写到磁盘

(7) 获得独享锁, 修改数据库磁盘文件
获得独享锁是分两步完成的,先获得一个“临界锁”, 然后升级成独享锁。
临界锁的作用是防止生成新的共享锁。

(8) 将修改更新到磁盘
先更新到操作系统缓存, 然后调用flush或sync写到磁盘文件中。

(9)删除回滚日志文件

(10) 释放锁,事务结束

原因很可能是锁没有释放,是对数据的保护~~~
离线charles_gz

只看该作者 5楼 发表于: 2011-10-31
回 4楼(ppdayz) 的帖子
上面所说的锁是sqllite操作数据库自动完成的吧?我在程序中只是加了线程锁,你的邮箱是多少 我可以把我的sql类文件给你发过去。
离线charles_gz

只看该作者 6楼 发表于: 2011-11-01
求指教啊~!!!!
离线charles_gz

只看该作者 7楼 发表于: 2011-11-04
怎么没人来解决一下呢!!
快速回复
限100 字节
 
上一个 下一个