将数据从一个SQLite数据库复制到另一个

我有两个SQLite数据库与普通的数据,但目的不同,我想避免重新插入数据,所以我想知道是否有可能从一个数据库复制到另一个整个表?

您必须使用ATTACH命令将数据库X附加到数据库Y,然后针对要传输的表运行适当的“插入”命令。

INSERT INTO X.TABLE SELECT * FROM Y.TABLE; 

或者,如果列不匹配:

 INSERT INTO X.TABLE(fieldname1, fieldname2) SELECT fieldname1, fieldname2 FROM Y.TABLE; 

考虑一个例子,我有两个数据库,即allmsa.db和atlanta.db。 说数据库allmsa.db有美国所有msas的表,而atlanta.db数据库是空的。

我们的目标是从allmsa.db将atlanta表复制到atlanta.db。

脚步

  1. sqlite3 atlanta.db(进入atlanta数据库)
  2. 附上allmsa.db。 这可以使用命令ATTACH '/mnt/fastaccessDS/core/csv/allmsa.db' AS AM; 注意我们给数据库的整个path附加。
  3. 检查数据库列表使用sqlite> .databases你可以看到输出为
  seq名称文件                                                      
 --- --------------- -------------------------------- --------------------------
 0 main /mnt/fastaccessDS/core/csv/atlanta.db                  
 2 AM /mnt/fastaccessDS/core/csv/allmsa.db 
  1. 现在你来到你的实际目标。 使用命令INSERT INTO atlanta SELECT * FROM AM.atlanta;

这应该是你的目的。

简单,正确的方式在一条线上:

 sqlite3 old.db ".dump mytable" | sqlite3 new.db 

主键和列types将被保留。

对于一次操作,您可以使用.dump和.read。

从old_db.sqlite转储表my_table

 c:\sqlite>sqlite3.exe old_db.sqlite sqlite> .output mytable_dump.sql sqlite> .dump my_table sqlite> .quit 

将转储读入到new_db.sqlite中,假定表中不存在

 c:\sqlite>sqlite3.exe new_db.sqlite sqlite> .read mytable_dump.sql 

现在你已经克隆了你的桌子。 要为整个数据库执行此操作,只需在.dump命令中省略表名即可。

奖金:数据库可以有不同的编码。

Objective-C代码用于将表从数据库复制到另一个数据库

 -(void) createCopyDatabase{ NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES); NSString *documentsDir = [paths objectAtIndex:0]; NSString *maindbPath = [documentsDir stringByAppendingPathComponent:@"User.sqlite"];; NSString *newdbPath = [documentsDir stringByAppendingPathComponent:@"User_copy.sqlite"]; NSFileManager *fileManager = [NSFileManager defaultManager]; char *error; if ([fileManager fileExistsAtPath:newdbPath]) { [fileManager removeItemAtPath:newdbPath error:nil]; } sqlite3 *database; //open database if (sqlite3_open([newdbPath UTF8String], &database)!=SQLITE_OK) { NSLog(@"Error to open database"); } NSString *attachQuery = [NSString stringWithFormat:@"ATTACH DATABASE \"%@\" AS aDB",maindbPath]; sqlite3_exec(database, [attachQuery UTF8String], NULL, NULL, &error); if (error) { NSLog(@"Error to Attach = %s",error); } //Query for copy Table NSString *sqlString = @"CREATE TABLE Info AS SELECT * FROM aDB.Info"; sqlite3_exec(database, [sqlString UTF8String], NULL, NULL, &error); if (error) { NSLog(@"Error to copy database = %s",error); } //Query for copy Table with Where Clause sqlString = @"CREATE TABLE comments AS SELECT * FROM aDB.comments Where user_name = 'XYZ'"; sqlite3_exec(database, [sqlString UTF8String], NULL, NULL, &error); if (error) { NSLog(@"Error to copy database = %s",error); } } 

我需要将数据从一个SQL Server压缩数据库移动到SQLite,所以使用SQL Server 2008,您可以右键单击表并select'脚本表',然后'数据插入'。 复制插入语句删除“GO”语句,并使用“数据库浏览器Sqlite”应用程序应用于sqlite数据库成功执行。