是否可以在C/C++中以编程方式将SQLite数据库转换为SQL语句?

是否可以在C/C++中以编程方式将SQLite数据库转换为SQL语句?,c++,c,sqlite,C++,C,Sqlite,我知道SQLite命令行工具中存在该函数,Python有一个模拟.dump函数的命令 是否有标准API调用或C/C++包装程序以编程方式提供.dump功能?您可以从sqlite_master执行SELECT*以获取所有表和索引。每行都有一个类型列,该类型列对于表为“table”,对于索引为“index”,以及一个sql列,其中包含用于创建该表/索引的sql语句 然后,对于在sqlite_master中找到的每个表,从中选择*每个sqlite_master行都有一个名称列,并写出表中的所有数据 有

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

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

您可以从sqlite_master执行SELECT*以获取所有表和索引。每行都有一个类型列,该类型列对于表为“table”,对于索引为“index”,以及一个sql列,其中包含用于创建该表/索引的sql语句

然后,对于在sqlite_master中找到的每个表,从中选择*每个sqlite_master行都有一个名称列,并写出表中的所有数据


有关更多信息,请参见SQLite和页面

API似乎没有任何转储函数,但您可以通过以下方式构造转储:

创建一个新函数,该函数将使用sqlite3_exec或sqlite3_get_表的缓冲区结果并将其转储到文件中*

使用SQLite源代码中提供的转储函数,您可以在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);
}

我不知道是否有预先为它制作的工具,但你可以自己实现它


首先,通过读取主表获取模式。之后,您将拥有数据库模式、表名和列。您将能够自动读取所有数据并为其构造SQL。这应该不会太难实施

哦!看,你让我踢我自己——我如何模仿C工具的行为,我有C或C++的源代码?嗯