作者:懒懒加菲猫爱小狐狸 | 来源:互联网 | 2023-05-16 15:11
我正在执行处理数据库损坏的任务,因此我一直在研究SQLite的如何损坏SQLite数据库和SO的如何验证数据库文件是否有效/一致。
但是我还有更具体的问题,可能对其他人也有帮助。布尔答案还可以
如果sqlite数据库文件已损坏,我可以打开它吗?有时还是总是?
如果answer1是yes并且我打开它,读/写操作会导致我的应用程序崩溃还是只会返回可以处理的错误?
如果发生损坏,我的以下(下一个)读/写操作是否可以成功进行,或者每次读/写操作都将返回错误?
在成功创建和关闭数据库文件之后md5sum
,如果我想避免quick_check
并且integrity_check
速度较慢,是否可以在下次打开文件时检测到任何损坏?
angry person..
5
数据损坏的本质是,除非您运行彻底的验证过程,否则所有赌注都将消失。什么都可能发生。猪会飞。谁知道。
您的问题的答案:
有时候是。由于SQLite在打开时不会验证整个数据库,因此除非在打开过程中碰巧读取了损坏的数据,否则它无法知道文件已损坏。
最有可能的崩溃操作将以您可以处理的方式崩溃。如果SQLite中存在可利用的错误(例如缓冲区溢出错误或类似错误),则所有赌注都已取消,但没有迹象表明存在此类错误。
有些可以工作,有些可以失败,没有办法事先知道。
您无法使用MD5检测到损坏的SQLite数据库。首先,正确的MD5值应该是多少?唯一知道的方法是从文件中计算出来,这也是您要验证的内容。
简而言之,pragma integrity_check;
除了无法定期执行之外,您无法保证SQLite如何处理损坏的数据库。
例如,如果发生损坏使数据库看起来有效,但该数据库不再包含用户存储在其中的原始数据,该怎么办?
1> angry person..:
数据损坏的本质是,除非您运行彻底的验证过程,否则所有赌注都将消失。什么都可能发生。猪会飞。谁知道。
您的问题的答案:
有时候是。由于SQLite在打开时不会验证整个数据库,因此除非在打开过程中碰巧读取了损坏的数据,否则它无法知道文件已损坏。
最有可能的崩溃操作将以您可以处理的方式崩溃。如果SQLite中存在可利用的错误(例如缓冲区溢出错误或类似错误),则所有赌注都已取消,但没有迹象表明存在此类错误。
有些可以工作,有些可以失败,没有办法事先知道。
您无法使用MD5检测到损坏的SQLite数据库。首先,正确的MD5值应该是多少?唯一知道的方法是从文件中计算出来,这也是您要验证的内容。
简而言之,pragma integrity_check;
除了无法定期执行之外,您无法保证SQLite如何处理损坏的数据库。
例如,如果发生损坏使数据库看起来有效,但该数据库不再包含用户存储在其中的原始数据,该怎么办?