我有2个SQLite数据库,它们有共同的数据,但目的不同,我想避免重新插入数据,所以我想知道是否可以将整个表从一个数据库复制到另一个数据库?
Mic*_*rry 164
您必须使用ATTACH命令将Database X与数据库Y连接,然后为要传输的表运行相应的Insert Into命令.
INSERT INTO X.TABLE SELECT * FROM Y.TABLE;
Run Code Online (Sandbox Code Playgroud)
或者,如果列按顺序不匹配:
INSERT INTO X.TABLE(fieldname1, fieldname2) SELECT fieldname1, fieldname2 FROM Y.TABLE;
Run Code Online (Sandbox Code Playgroud)
小智 50
考虑一个例子,我有两个数据库,即allmsa.db和atlanta.db.假设数据库allmsa.db具有美国所有msas的表,而数据库atlanta.db为空.
我们的目标是将atlanta表从allmsa.db复制到atlanta.db.
ATTACH '/mnt/fastaccessDS/core/csv/allmsa.db' AS AM;
说明来完成,我们将附加数据库的完整路径.sqlite> .databases
您可以查看输出的数据库列表seq name file --- --------------- ---------------------------------------------------------- 0 main /mnt/fastaccessDS/core/csv/atlanta.db 2 AM /mnt/fastaccessDS/core/csv/allmsa.db
INSERT INTO atlanta SELECT * FROM AM.atlanta;
这应该符合您的目的.
Ber*_*mos 47
一条线上最简单,最正确的方式:
sqlite3 old.db ".dump mytable" | sqlite3 new.db
Run Code Online (Sandbox Code Playgroud)
将保留主键和列类型.
对于一次性操作,您可以使用.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
Run Code Online (Sandbox Code Playgroud)
假设表中不存在,请将转储读入new_db.sqlite
c:\sqlite>sqlite3.exe new_db.sqlite
sqlite> .read mytable_dump.sql
Run Code Online (Sandbox Code Playgroud)
现在你克隆了你的桌子.要对整个数据库执行此操作,只需在.dump命令中省略表名.
额外奖励:数据库可以有不同的编码.
小智 7
从数据库到另一个数据库的复制表的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);
}
}
Run Code Online (Sandbox Code Playgroud)
最简单的方法是通过 SQLite Studio
如果您没有从https://download.cnet.com/SQLiteStudio/3000-10254_4-75836135.html下载
脚步:
1.添加两个数据库。
2.单击查看选项卡,然后单击数据库,如图所示。
归档时间: |
|
查看次数: |
94431 次 |
最近记录: |