Возможно ли программно преобразовать базу данных SQLite в SQL-запросы в C/С++?

Я знаю о существовании функции .dump в инструменте командной строки SQLite, а Python имеет iterdump, которая эмулирует эту функцию .dump.

Существует ли стандартный вызов API или оболочка C/С++, который программно реализует эту функцию .dump?

Ответ 1

Api, похоже, не имеет функции дампа (http://www.sqlite.org/capi3ref.html), но вы можете создать свой дамп с помощью:

  • Создание новой функции, которая будет использовать результат вашего буфера sqlite3_exec() или sqlite3_get_table() и выгрузить его в файл FILE *

  • Используйте функцию дампа, предоставленную в исходном коде 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);
}

Ответ 2

Вы можете сделать SELECT * FROM sqlite_master, чтобы получить все таблицы и индексы (каждая строка имеет столбец type, который будет 'table' для таблиц и 'index' для индексов, и столбец sql, который содержит sql, который используется для создания этой таблицы/индекса).

Затем для каждой таблицы, найденной в них sqlite_master, SELECT * (каждая строка sqlite_master имеет столбец name) и выписывает все данные в таблицах.

См. SQLite FAQ и командная строка оболочки страницы для дополнительной информации.

Ответ 3

Я не знаю, есть ли у него готовые инструменты, но вы можете реализовать его самостоятельно.

Сначала получите схему, прочитав основную таблицу. После этого у вас будет схема базы данных (имена таблиц и столбцы). Вы сможете автоматически считывать все данные и строить для него SQL. Это не должно быть слишком сложно реализовать.