Copie de données d'une base de données SQLite à une autre
J'ai 2 bases de données SQLite avec des données communes mais à des fins différentes et je voulais éviter de réinsérer des données, donc je me demandais s'il était possible de copier une table entière d'une base de données à une autre?
6 réponses
Vous devrez attacher la base de données X avec la base de données Y en utilisant la commandeATTACH , puis exécutez les commandes Insert Into appropriées pour les tables que vous souhaitez transférer.
INSERT INTO X.TABLE SELECT * FROM Y.TABLE;
Ou, si les colonnes ne sont pas appariées dans l'ordre:
INSERT INTO X.TABLE(fieldname1, fieldname2) SELECT fieldname1, fieldname2 FROM Y.TABLE;
Considérons un exemple où j'ai deux bases de données à savoir allmsa.db et atlanta.DB. Dites la base de données allmsa.db a des tables pour tous les msas aux États-Unis et la base de données atlanta.db est vide.
Notre objectif est de copier la table atlanta de allmsa.db à atlanta.DB.
Étapes
- sqlite3 atlanta.db (pour aller dans la base de données atlanta)
- joindre allmsa.DB. Cela peut être fait en utilisant la commande
ATTACH '/mnt/fastaccessDS/core/csv/allmsa.db' AS AM;
notez que nous donnons le chemin entier de la base de données à attacher. - vérifier la liste de base de données en utilisant
sqlite> .databases
vous pouvez voir la sortie comme
seq name file --- --------------- ---------------------------------------------------------- 0 main /mnt/fastaccessDS/core/csv/atlanta.db 2 AM /mnt/fastaccessDS/core/csv/allmsa.db
- Maintenant, vous arrivez à votre cible réelle. Utilisez la commande
INSERT INTO atlanta SELECT * FROM AM.atlanta;
Cela devrait servir votre but.
Manière la plus simple et correcte sur une seule ligne:
sqlite3 old.db ".dump mytable" | sqlite3 new.db
Clé primaire et les types de colonnes seront conservés.
Pour une action de temps, vous pouvez utiliser .vidage et .lire.
Vider la table my_table de old_db.sqlite
c:\sqlite>sqlite3.exe old_db.sqlite
sqlite> .output mytable_dump.sql
sqlite> .dump my_table
sqlite> .quit
Lire le vidage dans la new_db.sqlite en supposant que la table n'existe pas
c:\sqlite>sqlite3.exe new_db.sqlite
sqlite> .read mytable_dump.sql
Maintenant, vous avez cloné votre table. Pour ce faire pour toute la base de données, il suffit de laisser le nom de la table dans le .commande dump.
Bonus: les bases de données peuvent avoir différents encodages.
Code Objective - C pour copier la Table d'une base de données vers une autre base de données
-(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);
}
}
J'avais besoin de déplacer des données d'une base de données sql server compact vers sqlite, donc en utilisant sql server 2008, vous pouvez faire un clic droit sur la table et sélectionner 'Script Table To', puis 'Data to Insertions'. Copiez les instructions insert supprimez les instructions 'GO' et exécutez-les avec succès lorsqu'elles sont appliquées à la base de données sqlite à l'aide de l'application 'DB Browser for Sqlite'.