SQLite コマンド ライン ツールに.dump関数が存在することは知っています。Python には、その .dump 関数をエミュレートするiterdumpコマンドがあります。
その .dump 機能をプログラムで提供する標準 API 呼び出しまたは C/C++ ラッパーはありますか?
SQLite コマンド ライン ツールに.dump関数が存在することは知っています。Python には、その .dump 関数をエミュレートするiterdumpコマンドがあります。
その .dump 機能をプログラムで提供する標準 API 呼び出しまたは C/C++ ラッパーはありますか?
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);
}
aを実行しSELECT * FROM sqlite_master
て、すべてのテーブルとインデックスを取得できます (各行には、テーブルとインデックス用の列と、type
そのテーブル/インデックスの作成に使用される sql ステートメントを含む列があります)。'table'
'index'
sql
次に、 で見つかった各テーブルsqlite_master
(SELECT *
各行sqlite_master
には列がありname
ます) から、テーブル内のすべてのデータを書き出します。
詳細については、SQLite FAQとコマンド ライン シェルページを参照してください。
あらかじめ作成されたツールがあるかどうかはわかりませんが、自分で実装することはできます。
まず、マスターテーブルを読み取ってスキーマを取得します。その後、データベーススキーマ(テーブル名と列)が作成されます。すべてのデータを自動的に読み取り、そのためのSQLを構築できるようになります。それを実装するのはそれほど難しいことではありません。