IOS-TranferData - одна БД в другую БД - разные ключи шифрования - Sqlicipher

У меня есть 3 базы данных (клиент, клиент, продукт) в моем приложении. Я хочу перенести одну БД в две другие БД.

Три БД зашифрованы, и эти ключи шифрования отличаются. Если я использую один и тот же ключ для трех БД, он работает. Но если я использую другой ключ, он возвращает код ошибки 26.

Я использую приведенный ниже код для присоединения баз данных. Пожалуйста, ведите меня.

// _database теперь равен client.

 NSMutableString *tempString = [[NSMutableString alloc]initWithString:@"attach DATABASE  'customer' as c1 "];
  int resultCode = sqlite3_exec(_database, [tempString UTF8String], NULL, NULL, NULL);
    [tempString release]; tempString = nil;

    if (resultCode == SQLITE_OK)
    {

        tempString = [[NSMutableString alloc]initWithString:@"INSERT INTO table SELECT * FROM c1.table"];

        sqlite3_stmt *stmt_version = 0x00;
        resultCode = sqlite3_exec(_database, [tempString UTF8String], NULL, &stmt_version, NULL);
        [tempString release]; tempString = nil;
        sqlite3_finalize(stmt_version);
        if (resultCode == SQLITE_OK)
        {
            status =  YES;
        }
    }
   tempString = [[NSMutableString alloc]initWithString:@"DETACH DATABASE c1 "];
    sqlite3_exec(_database, [tempString UTF8String], NULL, NULL, NULL);
    [tempString release]; tempString = nil;

1 ответ

ATTACH Команда позволяет вам также указать ключ. Кроме того, SQLCipher предоставляет удобную функцию sqlcipher_export продублировать схему и данные базы данных. Ниже приведен пример создания базы данных с одним ключом, а затем экспортируйте ее данные и схему в другую зашифрованную базу данных с другим ключом.

$> ./sqlcipher foo.db
sqlite> PRAGMA key = 'foo';
sqlite> CREATE table t1(a,b);
sqlite> INSERT INTO t1(a,b) values('one for the money', 'two for the show');
sqlite> ATTACH database 'bar.db' as bar KEY 'bar';
sqlite> SELECT sqlcipher_export('bar');
sqlite> DETACH database bar;
sqlite> .q
Другие вопросы по тегам