Copia di dati da un database SQLite a un altro

Ho 2 database SQLite con dati comuni ma con scopi diversi e volevo evitare di reinserire i dati, quindi mi chiedevo se fosse ansible copiare un’intera tabella da un database all’altro?

Dovrai colbind il Database X al Database Y usando il comando ATTACH , quindi eseguire i comandi Insert Into appropriati per le tabelle che vuoi trasferire.

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

Oppure, se le colonne non sono abbinate nell’ordine:

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

Considera un esempio in cui ho due database vale a dire allmsa.db e atlanta.db. Supponiamo che il database allmsa.db disponga di tabelle per tutti gli ms in Stati Uniti e il database atlanta.db sia vuoto.

Il nostro objective è copiare la tabella atlanta da allmsa.db a atlanta.db.

passi

  1. sqlite3 atlanta.db (per entrare nel database di atlanta)
  2. Albind allmsa.db. Questo può essere fatto usando il comando ATTACH '/mnt/fastaccessDS/core/csv/allmsa.db' AS AM; si noti che forniamo l’intero percorso del database da albind.
  3. controlla l’elenco dei database usando sqlite> .databases puoi vedere l’output come
  nome file seq                                                      
 --- --------------- -------------------------------- --------------------------
 0 main /mnt/fastaccessDS/core/csv/atlanta.db                  
 2 AM /mnt/fastaccessDS/core/csv/allmsa.db 
  1. ora vieni al tuo vero objective. Usa il comando INSERT INTO atlanta SELECT * FROM AM.atlanta;

Questo dovrebbe servire al tuo scopo.

Modo più semplice e corretto su una singola riga:

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

La chiave primaria e i tipi di colonne saranno mantenuti.

Per una volta, puoi usare .dump e .read.

Scarica la tabella my_table da old_db.sqlite

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

Leggi il dump nel new_db.sqlite assumendo che la tabella non esiste

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

Ora hai clonato il tuo tavolo. Per fare questo per l’intero database, è sufficiente lasciare il nome della tabella nel comando .dump.

Bonus: i database possono avere codifiche diverse.

Codice Objective-C per copia tabella da un database a un altro database

 -(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); } } 

Avevo bisogno di spostare i dati da un database compatto di SQL Server a SQLite, quindi utilizzando SQL Server 2008 è ansible fare clic destro sulla tabella e selezionare “Tabella script in” e quindi “Dati da inserire”. Copia le istruzioni di inserimento rimuovi le istruzioni ‘GO’ e viene eseguito correttamente quando applicato al database sqlite utilizzando l’app ‘DB Browser for Sqlite’.