12

SQLite コマンド ライン ツールに.dump関数が存在することは知っています。Python には、その .dump 関数をエミュレートするiterdumpコマンドがあります。

その .dump 機能をプログラムで提供する標準 API 呼び出しまたは C/C++ ラッパーはありますか?

4

3 に答える 3

10

API にはダンプ機能 ( https://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);
}
于 2012-08-07T06:10:00.200 に答える
3

aを実行しSELECT * FROM sqlite_masterて、すべてのテーブルとインデックスを取得できます (各行には、テーブルとインデックス用の列と、typeそのテーブル/インデックスの作成に使用される sql ステートメントを含む列があります)。'table''index'sql

次に、 で見つかった各テーブルsqlite_master(SELECT *各行sqlite_masterには列がありnameます) から、テーブル内のすべてのデータを書き出します。

詳細については、SQLite FAQコマンド ライン シェルページを参照してください。

于 2012-08-07T06:09:54.217 に答える
0

あらかじめ作成されたツールがあるかどうかはわかりませんが、自分で実装することはできます。

まず、マスターテーブルを読み取ってスキーマを取得します。その後、データベーススキーマ(テーブル名と列)が作成されます。すべてのデータを自動的に読み取り、そのためのSQLを構築できるようになります。それを実装するのはそれほど難しいことではありません。

于 2012-08-07T06:11:34.993 に答える