我想将表从aDB复制到另一个bDB。
所以我做了一个方法。 我认为开放2数据库和使用插入查询将起作用,但我不知道细节方式。
-(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?
}
是不是?以及如何制作更多? //复制区域的来源。
答案 0 :(得分:21)
在sqlite3中,您可以组合ATTACH [1]和CREATE TABLE .. AS [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] http://www.sqlite.org/lang_attach.html
答案 1 :(得分:0)
经过几个小时的斗争,在上面的帖子的帮助下,最后我能够创建Objective-C代码来实现这一目标。