studio reales proyectos programacion libro introducción incluye herramientas fundamentos fuente español código con avanzado aplicaciones database sqlite sqlite3

database - reales - Copia de datos de una base de datos SQLite a otra



libro de android studio en español pdf (6)

Código Objective-C para copiar la tabla de una base de datos a otra base de datos

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

Tengo 2 bases de datos SQLite con datos comunes pero con diferentes propósitos y quería evitar reinsertar datos, por lo que me preguntaba si era posible copiar una tabla completa de una base de datos a otra.


Considere un ejemplo en el que tengo dos bases de datos, a saber, allmsa.db y atlanta.db. Digamos que la base de datos allmsa.db tiene tablas para todos los msas en los EE. UU. Y la base de datos atlanta.db está vacía.

Nuestro objetivo es copiar la tabla atlanta de allmsa.db a atlanta.db.

Pasos

  1. sqlite3 atlanta.db (para acceder a la base de datos de atlanta)
  2. Adjunte allmsa.db. Esto puede hacerse usando el comando ATTACH ''/mnt/fastaccessDS/core/csv/allmsa.db'' AS AM; Tenga en cuenta que le damos la ruta completa de la base de datos que se adjuntará.
  3. compruebe la lista de bases de datos usando sqlite> .databases puede ver el resultado como

seq name file --- --------------- ---------------------------------------------------------- 0 main /mnt/fastaccessDS/core/csv/atlanta.db 2 AM /mnt/fastaccessDS/core/csv/allmsa.db

  1. ahora vienes a tu objetivo real. Use el comando INSERT INTO atlanta SELECT * FROM AM.atlanta;

Esto debería servir para tu propósito.


Deberá adjuntar la Base de datos X con la Base de datos Y utilizando el comando ATTACH , luego ejecutar los comandos Insert Into correspondientes para las tablas que desea transferir.

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

O bien, si las columnas no coinciden en orden:

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


Manera más fácil y correcta en una sola línea:

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

La clave principal y los tipos de columnas se mantendrán.


Necesitaba mover los datos de una base de datos compacta del servidor sql a sqlite, así que al usar sql server 2008 puede hacer clic derecho en la tabla y seleccionar ''Script Table To'' y luego ''Data to Inserts''. Copie las instrucciones de inserción elimine las instrucciones ''IR'' y se haya ejecutado correctamente cuando se haya aplicado a la base de datos sqlite utilizando la aplicación ''DB Browser for Sqlite''.


Para una acción de una vez, puede usar .dump y .read.

Vuelca la tabla my_table de old_db.sqlite

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

Lea el volcado en new_db.sqlite suponiendo que la tabla no existe

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

Ahora has clonado tu mesa. Para hacer esto para toda la base de datos, simplemente deje fuera el nombre de la tabla en el comando .dump.

Bonificación: las bases de datos pueden tener diferentes codificaciones.