我正在开发一个iOS应用程序。Encryption & Decryption读和写一直工作到iOS 9。但是在升级到iOS 10之后,它开始给出以下消息的问题:“文件是加密的,或者不是数据库”。
对于DB encryption,我使用以下代码:
sqlite3 *db1;
if (sqlite3_open([[self.databaseURL path] UTF8String], &db1) == SQLITE_OK) {
const char* key = [@"strong" UTF8String];
sqlite3_key(db1, key, (int)strlen(key));
if (sqlite3_exec(db1, (const char*) "SELECT count(*) FROM sqlite_master;", NULL, NULL, NULL) == SQLITE_OK) {
NSLog(@"Password is correct, or a new database has been initialized");
} else {
NSLog(@"Incorrect password!");
}
sqlite3_close(db1);
}&它运行得非常好。
对于打开和读取操作,我使用以下代码:
-(void)openDB
{
NSString *docsDir;
docsDir = [self getDirectoryPath];
aPath = [docsDir stringByAppendingPathComponent: @"SQLITE_DEMO.sqlite"];
dbpath = [aPath UTF8String];
}阅读:
if (sqlite3_open(dbpath, &contactDBNew) == SQLITE_OK)
{
NSString querySQL = [NSString stringWithFormat:@"SELECT FROM USER"];
const char *query_stmt = [querySQL UTF8String];
char *err;
int check = sqlite3_exec(contactDBNew, query_stmt, NULL, NULL, &err);
if (sqlite3_prepare_v2(contactDBNew, query_stmt, -1, &statement, NULL) == SQLITE_OK)
{
// Successfully executed.
} else {
// Error in execution.
}
}在这里,它在读取准备语句时失败,错误消息如下:“文件是加密的,或者不是数据库”。
请告诉我我错过了什么!!
发布于 2016-12-05 19:42:53
您需要在每次打开数据库后运行PRAGMA key=或使用sqlite3_key。实际上,最好在应用程序开始时打开数据库一次,然后在结束时关闭它。由于密钥派生,重复打开和关闭数据库是非常昂贵的。
https://stackoverflow.com/questions/40263384
复制相似问题