3

我在他们的站点中将 SQLCipher 配置为教程...我可以编译并运行该项目。但是 sqlite3_exec 在尝试执行语句时返回 SQLITE_NOTADB。

请在下面找到代码片段:

==================

NSString *dbPath = [self getDBPath];
BOOL success = [fileManager fileExistsAtPath:dbPath];           
if(success) {
    int sql_results = sqlite3_open([dbPath UTF8String], &SQLDB);            
    const char* key = [@"BIGSecret" UTF8String];
    sqlite3_key(SQLDB, key, strlen(key));
    if (sql_results == SQLITE_OK) {
        NSString *sql;
        const char *update_sql; 
        sql = [NSString stringWithFormat:@"DROP table %@",tablename];
        update_sql = [sql cStringUsingEncoding:NSUTF8StringEncoding];
        if(sqlite3_exec(SQLDB, update_sql, nil, nil, nil) == SQLITE_OK) { 
            NSLog(@"Good to go %@ dropped",tablename);
        }
        else {      
            NSLog(@"Bad Delete Cat SQL: %s -- %d", update_sql,sql_results); 
            NSLog(@"error code %i", sql_results);
        }

我无法解决问题,我哪里出错了......

谢谢,

4

1 回答 1

2

从邮件列表交叉发布:

我在您的代码中注意到,如果数据库文件存在,您只会将块输入到 sqlite3_open。您是否偶然尝试使用此代码使用 SQLCipher 加密现有的标准 SQLite 数据库?如果是这样,调用 sqlite3_key 将无法正常工作。相反,您希望打开标准 SQLite 数据库,附加一个新的加密数据库,然后在两者之间导出数据。这里有关于这个过程的更多细节:

http://sqlcipher.net/sqlcipher-api/#sqlcipher_export

处理加密数据库后,您可以在使用它之前调用 sqlite3_key 作为第一个操作。

于 2012-09-27T04:04:37.833 回答