你如何确定.sqlite或.sqback在Java中是否已损坏?

问题描述 投票:7回答:2

我得到了一个目录目录,每个目录都包含我必须解析的.sqlite和.sqback文件的集合。

问题是我相信其中一些文件在收到时会损坏,因为我收到错误:错误:[SQLITE_CORRUPT]当我尝试处理它们时,我的控制台上的数据库磁盘映像格式错误(数据库磁盘映像格式错误) 。这只发生在某些文件中。我已经隔离了一些,并尝试单独运行我的程序在这些坏文件的新副本上,它们会导致错误。大多数文件虽然很好:)

我意识到我有可能确实会被给予损坏的文件,所以在尝试解析它们之前,我想要一种方法来确定哪些文件是好的,哪些文件不是。

我是用Java写的。我只对sqlite和sqback验证感兴趣,因为我知道我的解析器工作。我正在重复使用之前的项目。

暗示?建议?答案?

非常感谢知识转移。

java android sqlite corruption
2个回答
5
投票

像普通的SQL查询一样运行PRAGMA quick_check。结果与包含字符串的单列表相同;对于一个完整的数据库,你得到一行说“ok”,对于一个损坏的,一堆错误消息。

sqlite> pragma quick_check;
ok

更改文件中的一些字节后:

sqlite> pragma quick_check;
*** in database main ***
Page 64: btreeInitPage() returns error code 11
On tree page 40 cell 23: Child page depth differs
On tree page 40 cell 24: Child page depth differs

无法保证会发现错误。


0
投票

我愿意并且确实使用

pragma integrity_check

该pragma对整个数据库进行完整性检查。 integrity_check编译指示查找无序记录,缺少页面,格式错误的记录,缺少索引条目以及UNIQUE,CHECK和NOT NULL约束错误。如果integrity_check编译指示发现问题,则返回字符串(每行有一列,每行一行),用于描述问题。在分析退出之前,Pragma integrity_check将返回最多N个错误,N默认为100.如果pragma integrity_check没有发现错误,则返回值为“ok”的单行。 (ref

为什么这比pragma quick_check更好?

该编译指示与integrity_check类似,不同之处在于它不验证UNIQUE约束并且不验证索引内容是否与表内容匹配。 (ref

换句话说,pragma integrity_check更彻底。

© www.soinside.com 2019 - 2024. All rights reserved.