这个数据库丢失了吗? DBData已损坏。 SQLite错误代码:26,'文件已加密或不是数据库'

时间:2014-03-18 12:56:02

标签: sqlite core-data

将文件从外部驱动器复制到本地硬盘后,我收到此错误,我无法打开它:

CoreData: error: (26) Fatal error.  The database at BDdata is corrupted.  SQLite error code:26, 'file is encrypted or is not a database'

Error: The file couldn’t be opened because it isn’t in the correct format.

我能做些什么吗?

1 个答案:

答案 0 :(得分:0)

可能的原因是您没有复制SQLite日志文件。使用最新版本的iOS和Mac OS X,SQLite使用WAL样式日记功能。当使用WAL时,有多个文件 - 您的主要SQLite文件和另外两个具有相同名称但添加了-wal-shm的文件。如果您不复制所有内容,则无法获得可用的SQLite文件。

如果不是这样,该文件可能已损坏。我不知道为什么 - “从操作系统手动复制”是什么意思?该文件是iOS还是OS X?你刚从一个Finder窗口拖到另一个窗口吗?

如果您打算像这样复制Core Data存储文件,最好将日志模式更改回DELETE,这样就无需复制额外的文件。您可以通过在添加持久存储时将日志模式包含为选项之一来实现此目的:

NSMutableDictionary *storeOptions = [NSMutableDictionary dictionary];
[storeOptions setObject:@{ @"journal_mode": @"DELETE" } forKey:NSSQLitePragmasOption];
// Add other options

然后在调用options时将其用作addPersistentStoreWithType:configuration:URL:options:error:参数。