背景:我一直在观看 WWDC 2011 - 208 Securing iOS application。他们提到如何使用名为 NSFileProtection 的文件加密来保护我们的数据。当我发现 automatic method mentioned (@38:00) is bugged ,我希望手动方式 (@37:00) 不是。我尝试对图像使用文件保护,一切都很好。只有 Sqlite 我无法创建。
问题:我尝试使用 sqlite3_open_v2
创建 SQLite3 数据库(没有核心数据)并传递 SQLITE_OPEN_FILEPROTECTION_COMPLETE
作为第三个参数的标志。它不返回 SQLITE_OK
。
代码:
if (sqlite3_open_v2([databasePath UTF8String], &database, SQLITE_OPEN_FILEPROTECTION_COMPLETE, NULL) == SQLITE_OK){
//everything works
}else{
//failed
}
更新:
正如 borrrden 提到的,两者都导致了以下错误代码:
SQLITE_MISUSE
(库使用不当)
更新 2: borrden 的第二条评论指出需要两个标志是正确的。它按照代码工作:
if (sqlite3_open_v2([databasePath UTF8String], &database, SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE|SQLITE_OPEN_FILEPROTECTION_COMPLETE, NULL) == SQLITE_OK)
最佳答案
Sqlite 对您的标志中缺少指定的文件访问模式不满意。它不知道是否应该以可写方式打开它,或者如果它不存在则是否创建它。因此,添加以下两个标志以及您当前使用的标志:
SQLITE_OPEN_READWRITE
SQLITE_OPEN_CREATE
这表明 sqlite 应该打开一个可写数据库,如果不存在则创建它。
关于ios - 在 iOS 中创建带文件保护的 SQLite3 数据库失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14721350/