12

我知道SQLite 命令行工具中存在.dump函数,Python 有一个模拟该 .dump 函数的iterdump命令。

是否有标准 API 调用或 C/C++ 包装器以编程方式提供该 .dump 功能?

4

3 回答 3

10

该 API 似乎没有任何转储功能(https://www.sqlite.org/capi3ref.html),但您可以通过以下方式构建转储:

  • 创建一个新函数,该函数将使用sqlite3_exec()or的缓冲区结果sqlite3_get_table()并将其转储到FILE *

  • 使用SQLite源码中提供的dump函数,可以在(shell.c)中找到。

编辑:添加此示例

/* TODO : This is just a sample code, modify it to meet your need */
void select_and_dump_sqlite3_table(sqlite3 *dbh)
{
    FILE    *dump_file;
    int i;
    sqlite3_stmt *stmt;

    dump_file = fopen(path_to_dump_file, "w");
    if (dump_file == NULL) {
        /* Error handling with errno and exit */
    }

    sqlite3_prepare_v2(dbh, "SELECT name, address, phone FROM Person",
                       0, &stmt, NULL);
    /* dump columns names into the file */
    for (i = 0; i < 3; i++) {
        fprintf (dump_file, "%30s | ", sqlite3_column_name(stmt, i));
    }
    printf ("\n");
  
    /* Dump columns data into the file */
    while (SQLITE_ROW == sqlite3_step(stmt)) {
        for (i = 0; i < 3; i++) {
          fprintf (dump_file, "%30s | ", sqlite3_column_text (stmt, i));
        }
      printf ("\n");
    }
    /* We're ready to leave */
    sqlite3_finalize (stmt);
}
于 2012-08-07T06:10:00.200 回答
3

您可以执行 aSELECT * FROM sqlite_master来获取所有表和索引(每行都有一个用于表和索引的列,以及一个type包含用于创建该表/索引的 sql 语句的列)。'table''index'sql

然后对于在 中找到的每个表sqlite_masterSELECT *从中(每sqlite_master行有一name列)并写出表中的所有数据。

有关更多信息,请参阅 SQLite常见问题解答命令行 shell页面。

于 2012-08-07T06:09:54.217 回答
0

我不知道是否有针对它的预制工具,但是您可以自己实现它。

首先,通过读取主表获取架构。之后,您将拥有数据库架构(表名和列)。您将能够自动读取所有数据并为其构建 SQL。这应该不难实现。

于 2012-08-07T06:11:34.993 回答