私はSQLiteコマンドラインツールの.dump関数の存在を知り、Pythonには.dump関数をエミュレートするiterdumpコマンドがあります。C/C++でSQLiteデータベースをSQL文にプログラムで変換することはできますか?
.dump機能をプログラムで提供する標準のAPI呼び出しまたはC/C++ラッパーはありますか?
私はSQLiteコマンドラインツールの.dump関数の存在を知り、Pythonには.dump関数をエミュレートするiterdumpコマンドがあります。C/C++でSQLiteデータベースをSQL文にプログラムで変換することはできますか?
.dump機能をプログラムで提供する標準のAPI呼び出しまたはC/C++ラッパーはありますか?
APIは、任意のダンプ機能(http://www.sqlite.org/capi3ref.html)を持っていないようですが、あなたはしてダンプを構築することができます。その新しい機能を作成する
*
はSqliteをソースコードで提供ダンプ機能を使って、ファイルにsqlite3_exec()
またはsqlite3_get_table()
のあなたのバッファの結果を使用して、それをダンプします、あなたはそれが(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);
}
あなたは(各行は、テーブルのための'table'
とインデックスの'index'
なりますtype
列、およびそのテーブル/インデックスを作成するために使用されたSQL文を含むsql
列を持つすべてのテーブルとインデックスを取得するためにSELECT * FROM sqlite_master
を行うことができます)。それらからsqlite_master
、SELECT *
で検出された各テーブルのその後
(各sqlite_master
行はname
列を有する)とテーブル内のすべてのデータを書き出します。
詳細については、SQLite FAQおよびcommand line shellページを参照してください。
このサンプルを追加することのためにあらかじめ用意されたツールがあるかどうかは知りませんが、あなたはそれを自分で実装することができます。
まず、マスターテーブルを読み取ってスキーマを取得します。その後、データベーススキーマ(テーブル名とカラム)を取得します。すべてのデータを自動的に読み込み、SQLを構築することができます。それは実装するのが難しいことではありません。
D'oh! [この質問](http://stackoverflow.com/questions/75675/how-do-i-dump-the-data-of-some-sqlite3-tables)を参照してください。 –