IOS传输数据-一个数据库到另一个数据库-不同的加密密钥-Sqlicipher
我的应用程序中有3个数据库:客户机、客户机和产品。我想把一个分贝转换成另外两个分贝 三个数据库是加密的,这些加密密钥是不同的。 如果我对三个DB使用相同的键,它就可以工作。但如果我使用了不同的密钥,它将返回错误代码26 我使用下面的代码附加数据库。请引导我 //_数据库现在等于客户端IOS传输数据-一个数据库到另一个数据库-不同的加密密钥-Sqlicipher,ios,sqlite,sqlcipher,Ios,Sqlite,Sqlcipher,我的应用程序中有3个数据库:客户机、客户机和产品。我想把一个分贝转换成另外两个分贝 三个数据库是加密的,这些加密密钥是不同的。 如果我对三个DB使用相同的键,它就可以工作。但如果我使用了不同的密钥,它将返回错误代码26 我使用下面的代码附加数据库。请引导我 //_数据库现在等于客户端 NSMutableString *tempString = [[NSMutableString alloc]initWithString:@"attach DATABASE 'customer' as c1 "
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;
该命令还允许您提供密钥。此外,SQLCipher还提供了一个方便的函数来复制数据库的模式和数据。下面是一个使用一个密钥创建数据库的示例,然后将其数据和模式导出到另一个使用不同密钥的加密数据库
$> ./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
谢谢你,帕克。但是我想转移一些指定的表。不是整个数据库到另一个数据库。在这种情况下,我将如何做?在这种情况下,您将需要复制您需要的模式部分,并执行插入选择。。。根据需要发出命令。您仍然可以使用ATTACH语句中的键部分调整其他数据库上的键。