我收到了一个目录目录,每个目录都包含我必须解析的.sqlite和.sqback文件的集合。
问题是我相信其中一些文件在收到时会损坏,因为我收到错误: 错误:[SQLITE_CORRUPT]数据库磁盘映像格式错误(数据库磁盘映像格式错误) 在我尝试处理它们时在我的控制台上。这只发生在某些文件中。我已经隔离了一些,并尝试单独运行我的程序在这些坏文件的新副本上,它们会导致错误。大多数文件都很好但是:)
我意识到我可能确实会被给予损坏的文件,所以我想在尝试解析它们之前确定哪些文件是好的,哪些文件不是。
我用Java写作。我只对sqlite和sqback验证感兴趣,因为我知道我的解析器工作。我正在重复使用之前的项目。
提示?建议?答案?
非常感谢知识转移。
答案 0 :(得分: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
无法保证此处可以找到错误。
答案 1 :(得分:0)
我会并且愿意使用
pragma integrity_check
此编译指示对整个数据库进行完整性检查。的 integrity_check pragma查找乱序记录,缺少页面, 记录格式错误,缺少索引条目以及UNIQUE,CHECK和NOT NULL约束错误。如果完整性检查杂项发现问题, 返回字符串(作为多行,每行一列) 描述问题。语法完整性检查将在以下位置返回 退出分析之前,大多数N错误,N默认为100。 pragma integrity_check未发现错误,其值为一行 返回“确定”。 (ref)
为什么这比pragma quick_check
好?
该编译指示类似于完整性检查,不同之处在于它不验证UNIQUE约束并且不验证索引内容是否与表内容匹配。 (ref)
换句话说,pragma integrity_check
更全面。