我正在尝试在一个iOS应用程序上工作,该应用程序允许用户使用GameKit通过蓝牙同步其sqlite数据库。有没有办法使用许多sqlite Objective-C库中的任何一个在sqlite Shell上执行等效于.dump的方法?

最佳答案

您可以创建一个备份数据库文件,将其发送过来,然后在目标设备上进行合并。创建备份文件的代码如下:

- (void) exportDB {

   sqlite3 *sourceDB, *destinationDB;
   sqlite3_backup *sql3Backup;

   NSString *sourceDBPath = @"/path/to/source/database";
   NSString *destinationDBPath = @"/path/to/destination/database";

   if(sqlite3_open([sourceDBPath UTF8String],&sourceDB) != SQLITE_OK){
       NSLog(@"%s\n",sqlite3_errmsg(sourceDB));
       return ;
   }

   if(sqlite3_open([destinationDBPath UTF8String],&destinationDB) != SQLITE_OK){
       sqlite3_close(sourceDB);
       NSLog(@"%s\n",sqlite3_errmsg(destinationDB));
       return;
   }

   sql3Backup = sqlite3_backup_init(destinationDB,"main",sourceDB,"main");
   if(sql3Backup == NULL){
       sqlite3_close(sourceDB);
       sqlite3_close(destinationDB);
       NSLog(@"%s\n",sqlite3_errmsg(destinationDB));
       return;
   }

   if(sqlite3_backup_step(sql3Backup, -1) != SQLITE_DONE){
       NSLog(@"%s\n",sqlite3_errmsg(destinationDB));
       return;
   }

   if(sqlite3_backup_finish(sql3Backup) != SQLITE_OK){
       NSLog(@"%s\n",sqlite3_errmsg(destinationDB));
       return;
   }

   sqlite3_close(sourceDB);
   sqlite3_close(destinationDB);
}

09-17 16:00