在objective-c中是不是有一个等效的sqlite .dump?

Posted

技术标签:

【中文标题】在objective-c中是不是有一个等效的sqlite .dump?【英文标题】:Is there a sqlite .dump equivalent in objective-c?在objective-c中是否有一个等效的sqlite .dump? 【发布时间】:2011-11-18 07:23:12 【问题描述】:

我正在尝试开发一个 ios 应用程序,该应用程序允许用户使用 GameKit 通过蓝牙同步他们的 sqlite 数据库。有没有办法使用许多 sqlite objective-c 库中的任何一个在 sqlite shell 上执行等效的 .dump ?

【问题讨论】:

到目前为止,这个转储命令还没有现成的类。读取所有表并使用 INSERT 语句生成 dump.sql 应该不会太难。 可能有帮助的东西:您可以通过查询系统表“sqlite_master”(即“SELECT * FROM sqlite_master;”)来获取表的目录。如果您遍历结果,您可以从“tbl_name”字段中获取表名,并且“sql”字段包含“CREATE TABLE”语句。解析后者以获取字段名称。 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

我不这么认为。但是,您可以执行 SELECT * 语句,然后在回调函数中迭代 argc。

类似

void callback (void *param, int argc, char **argv, char **azColName)

    for(int i=0;i<argc;i++)
    
        get ... azColName[i] ... argv[i]
    

【讨论】:

您能否扩展此答案以提供更多上下文?我想我或多或少明白你在说什么,但我不太确定它在实际应用中会如何工作。

以上是关于在objective-c中是不是有一个等效的sqlite .dump?的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark 中是不是有等效于 SQL 的 MSCK REPAIR TABLE 的方法

在 WHERE 子句中使用函数编写 SQL SELECT 语句是不是有 Django 等效项?

SQL Server 中是不是有等效的 SQL_CALC_FOUND_ROWS?

BigQuery 中是不是有与标准 SQL 等效的表通配符函数?

这些 SQL 查询是不是等效?哪个更好还是有更好的选择?

SQL 脚本 - 是不是存在与 #define 等效的内容?