0

コンパイル エラーは発生しませんが、データベースは暗号化されません...

const char* key = [@"BIGSecret" UTF8String];
    int err = sqlite3_key(database, key, strlen(key));

    if (sqlite3_exec(database, (const char*) "SELECT count(*) FROM animals;", NULL, NULL, NULL) == SQLITE_OK) {
        // database has been initialized
    }

私はサイトhttp://sqlcipher.net/documentation/iosを参照しており、既に AnimalDatabase.sql データベースが含まれている SQLiteTutorial の例を使用しています。

また、既存のデータベースでは暗号化が機能しないこともわかったので、次のコードを試しました。

      - (void)encryptDB
    {
        NSLog (@"Start");
        sqlite3 *DB = [self getNewDBConnection];

        sqlite3_exec(DB, "ATTACH DATABASE AnimalDatabase.sql AS encrypted KEY 1234;", NULL, NULL,  NULL);

    sqlite3_exec(DB, "CREATE TABLE encrypted.Account(id,Name,Desc,Image);", NULL, NULL, NULL);
    sqlite3_exec(DB, "INSERT INTO encrypted.Account SELECT * FROM animals;", NULL, NULL, NULL);

    sqlite3_exec(DB, "DETACH DATABASE encrypted;", NULL, NULL, NULL);   
    NSLog (@"End");
    }

    - (sqlite3 *)getNewDBConnection{
        if (sqlite3_open([databasePath UTF8String], &newDBconnection) == SQLITE_OK) { // opening AnimalDatabase.sql

        NSLog(@"Database Successfully Opened :)");
    } else {
        NSLog(@"Error in opening database :(");
    } 
    return newDBconnection; 
} 

しかし、まだ成功していません。誰でも助けることができますか?

4

1 に答える 1

1

最も可能性の高い問題は、プロジェクトをSQLCipher静的ライブラリにリンクしていないことです。したがって、プロジェクトはデフォルトのシステムSQLiteフレームワークを使用しています。

プロジェクトのビルド設定->ビルドフェーズ->バイナリライブラリとのリンクに移動し、libsqlcipher.aとlibcrypto.aの両方がそこにリストされていることを確認します。そうでない場合は、それらを追加します。次に、プロジェクトをクリーンアップして再構築します。

于 2011-05-17T15:45:49.013 に答える