Копирование данных из одной базы данных SQLite в другой

У меня есть 2 базы данных SQLite с общими данными, но с разными целями, и я хотел избежать повторной вставки данных, поэтому мне было интересно, можно ли скопировать всю таблицу из одной базы данных в другую?

6 ответов


вам придется присоединить базу данных X с базой данных Y, используя прикрепить command, затем запустите соответствующую команду Insert Into для таблиц, которые вы хотите перенести.

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

или, если столбцы не совпадают по порядку:

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

Рассмотрим пример, где у меня есть две базы данных, а именно allmsa.дБ и Атланта.децибел. Скажем, база данных allmsa.db имеет таблицы для всех msas в США и базе данных atlanta.db пуст.

наша цель-скопировать таблицу atlanta из allmsa.дБ в Атланту.децибел.

шаги

  1. sqlite3 для Атланта.db (перейти в базу данных atlanta)
  2. прикрепить allmsa.децибел. Это можно сделать с помощью команды ATTACH '/mnt/fastaccessDS/core/csv/allmsa.db' AS AM; обратите внимание, что мы даем весь путь к базе данных быть прикрепленным.
  3. проверьте список базы данных с помощью sqlite> .databases вы можете увидеть вывод как
seq  name             file                                                      
---  ---------------  ----------------------------------------------------------
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

первичный ключ и типы столбцов будут сохранены.


на один прием, можно использовать .свалка и. читать.

дамп таблицы my_table из old_db.SQLite в

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 compact в sqlite, поэтому с помощью sql server 2008 Вы можете щелкнуть правой кнопкой мыши по таблице и выбрать "таблица скриптов", а затем "данные для вставок". Скопируйте инструкции insert удалите инструкции "GO", и они успешно выполняются при применении к базе данных sqlite с помощью приложения "DB Browser for Sqlite".