Ios 将一个数据库中的表复制到另一个数据库
我想将表从aDB复制到另一个bDB 所以我制定了一个方法。 我认为Open2数据库和使用insert查询会起作用,但我不知道具体的方法Ios 将一个数据库中的表复制到另一个数据库,ios,database,sqlite,copy,Ios,Database,Sqlite,Copy,我想将表从aDB复制到另一个bDB 所以我制定了一个方法。 我认为Open2数据库和使用insert查询会起作用,但我不知道具体的方法 -(void)copyDatabaseTableSoruceFileName:(NSString *)source CopyFileName:(NSString *)copy { sqlite3 *sourceDatabase=NULL; sqlite3 *copyDatabase=NULL; NSArray *paths = NSSearchPathForD
-(void)copyDatabaseTableSoruceFileName:(NSString *)source CopyFileName:(NSString *)copy
{
sqlite3 *sourceDatabase=NULL;
sqlite3 *copyDatabase=NULL;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
NSString* documentDir = [paths objectAtIndex:0];
//source
[self copyFileIfNeed:source path:documentDir];
NSString *SourceDBPath = [documentDir stringByAppendingPathComponent:source];
if( sqlite3_open([SourceDBPath UTF8String],&sourceDatabase)!= SQLITE_OK )
{
NSLog(@"DB File Open Error :%@", SourceDBPath);
sourceDatabase = NULL;
}
//copy
[self copyFileIfNeed:copy path:documentDir];
NSString *CopyDBPath = [documentDir stringByAppendingPathComponent:copy];
if( sqlite3_open([CopyDBPath UTF8String],©Database)!= SQLITE_OK )
{
NSLog(@"DB File Open Error :%@", CopyDBPath);
copyDatabase = NULL;
}
//source to copy
// How in this area?
}
是这样吗?如何做得更多//源到复制区域。在sqlite3中,您可以组合附加[1]和创建表。。作为[2]命令: 首先,打开“bDB”数据库,然后执行以下语句:
ATTACH DATABASE "myother.db" AS aDB;
之后,您可以使用CREATE TABLE语法:
CREATE TABLE newTableInDB1 AS SELECT * FROM aDB.oldTableInMyOtherDB;
这将把数据“复制”到新数据库中。
如果要合并数据,还有一个INSERT[3]语句,但需要引用如下字段:
INSERT INTO newtable (field1,field2)
SELECT otherfield1,otherfield2 FROM aDB.oldTableInMyOtherDB;
参考资料:
[1]
[2]
[3] 经过几个小时的努力,在上面帖子的帮助下,我终于能够创建Objective-C代码来完成这项工作
NSString* dbPath1;
NSString* dbPath2;
dbPath1 = [self getDB1Path]; //This db have the desired table to be copied
dbPath2 = [self getDB2Path]; //This needs to have the desired table
//open database which contains the desired "table"
if (sqlite3_open(dbPath1.UTF8String, &databasePhase2) == SQLITE_OK)
{
NSString *attachSQL = [NSString stringWithFormat: @"ATTACH DATABASE \"%@\" AS phase2_db",dbPath2];
const char *attachSQLChar = [attachSQL UTF8String];
char* errInfo;
int result = sqlite3_exec(databasePhase2, attachSQLChar, nil, nil, &errInfo);
if (SQLITE_OK == result)
{
NSLog(@"new db attached");
NSString *attachSQL = [NSString stringWithFormat: @"CREATE TABLE newTableInDB1 AS SELECT * FROM phase2_db.qmAyahInfo"];
const char *createSQLChar = [attachSQL UTF8String];
int result2 = sqlite3_exec(databasePhase2, createSQLChar, nil, nil, &errInfo);
if (SQLITE_OK == result2)
{
NSLog(@"New table created in attached db");
}
}
sqlite3_close(databasePhase2);
}
+1对于“从aDB.oldTableInMyOtherDB中选择*创建新表格INDB1”的快速表格创建和复制,解释得很好。如果你能用ios objc编写具体的代码,那就太好了。这些命令是纯SQL的,你可以通过调用sqlite3_exec()来执行它们。别忘了用detach database phase2_db分离数据库,以防你不关闭它。