【问题标题】:How to create an in-memory database with schema based on an existing file database如何基于现有文件数据库创建具有架构的内存数据库
【发布时间】:2013-06-05 22:08:51
【问题描述】:

我有一个现有的数据库,其结构用于整个应用程序。数据库的实例定期轮换。我有一个数据库文件template.sqlite,它用作所有新创建数据库的模板。我想使用它,而不是创建脚本,所以我只需要维护一个文件,即空数据库模板本身。

我想基于该模板文件创建一个具有相同结构的内存数据库。

我知道我可以打开数据库并读取它的结构,然后在内存中手动创建数据库。如果可能的话,我希望能够以更自动化的方式完成。

【问题讨论】:

标签: c++ c sqlite database-schema


【解决方案1】:

您可以使用command-line shell.dump 命令创建一堆您可以执行的SQL 命令。

或者,您可以使用backup API 将模板复制到新数据库中。

【讨论】:

  • 转储脚本是我想要避免的。然后,我将不得不维护脚本并使用架构更改对其进行更新。不过,备份 API 似乎正是我所需要的!
  • @Dariusz:请注意,脚本的生成可以作为构建过程的一部分自动生成。
  • @MatthieuM。是的,它可以,但设置它不仅仅是读取已经存在的数据库,下面的几行代码。此外,这将依赖于另一个工具,该工具必须存在于正在构建的系统上,这反过来又是另一个不必要的依赖。
【解决方案2】:

作为所有寻求此问题答案的快速解决方案:一些C 代码可以解决问题:

int loadOrSaveDb(sqlite3 *pInMemory, const char *zFilename){
  int rc;
  sqlite3 *pFile;           /* Database connection opened on zFilename */
  sqlite3_backup *pBackup;  /* Backup object used to copy data */

  rc = sqlite3_open(zFilename, &pFile);
  if( rc==SQLITE_OK ) {

    pBackup = sqlite3_backup_init(pInMemory, "main", pFile, "main");
    if( pBackup ){
      (void)sqlite3_backup_step(pBackup, -1);
      (void)sqlite3_backup_finish(pBackup);
    }
    rc = sqlite3_errcode(pTo);
  }

  (void)sqlite3_close(pFile);
  return rc;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    • 2017-07-11
    相关资源
    最近更新 更多