IOS传输数据-一个数据库到另一个数据库-不同的加密密钥-Sqlicipher

IOS传输数据-一个数据库到另一个数据库-不同的加密密钥-Sqlicipher,ios,sqlite,sqlcipher,Ios,Sqlite,Sqlcipher,我的应用程序中有3个数据库:客户机、客户机和产品。我想把一个分贝转换成另外两个分贝 三个数据库是加密的,这些加密密钥是不同的。 如果我对三个DB使用相同的键,它就可以工作。但如果我使用了不同的密钥,它将返回错误代码26 我使用下面的代码附加数据库。请引导我 //_数据库现在等于客户端 NSMutableString *tempString = [[NSMutableString alloc]initWithString:@"attach DATABASE 'customer' as c1 "

我的应用程序中有3个数据库:客户机、客户机和产品。我想把一个分贝转换成另外两个分贝

三个数据库是加密的,这些加密密钥是不同的。 如果我对三个DB使用相同的键,它就可以工作。但如果我使用了不同的密钥,它将返回错误代码26

我使用下面的代码附加数据库。请引导我

//_数据库现在等于客户端

 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语句中的键部分调整其他数据库上的键。