ios - 在 iOS 中创建带文件保护的 SQLite3 数据库失败

标签 ios database xcode encryption sqlite

背景:我一直在观看 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/

相关文章:

iOS swift : presented view controller is nil

database - ScriptDb,如何判断对象是否有键

ios - 添加分享按钮 - Swift

ios - UIKeyboardWillShowNotification 错误地更改了 UIWebView 的框架

ios - 每个构建不同的文件

python - 通过 alembic 脚本并发数据库表索引

ios - Tableview 不在 swift 2 中显示数据

ios - Xcode 9 Beta 2 libxml 错误

ios - 如何实现橡皮筋效果?

database - 尝试从数据库中选择单行时出现奇怪的错误