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