2012-08-07 1 views
11

私はSQLiteコマンドラインツールの.dump関数の存在を知り、Pythonには.dump関数をエミュレートするiterdumpコマンドがあります。C/C++でSQLiteデータベースをSQL文にプログラムで変換することはできますか?

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

+0

D'oh! [この質問](http://stackoverflow.com/questions/75675/how-do-i-dump-the-data-of-some-sqlite3-tables)を参照してください。 –

答えて

8

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); 
} 
+0

あなたは自分自身を蹴っています。「CやC++のソースコードを持っているこのCツールの動作をどのようにエミュレートできますか?ダー。 :) – dlanod

+0

@dlanod:i答えにサンプルコードを追加 – TOC

3

あなたは(各行は、テーブルのための'table'とインデックスの'index'なりますtype列、およびそのテーブル/インデックスを作成するために使用されたSQL文を含むsql列を持つすべてのテーブルとインデックスを取得するためにSELECT * FROM sqlite_masterを行うことができます)。それらからsqlite_masterSELECT *で検出された各テーブルのその後

(各sqlite_master行はname列を有する)とテーブル内のすべてのデータを書き出します。

詳細については、SQLite FAQおよびcommand line shellページを参照してください。

0

このサンプルを追加することのためにあらかじめ用意されたツールがあるかどうかは知りませんが、あなたはそれを自分で実装することができます。

まず、マスターテーブルを読み取ってスキーマを取得します。その後、データベーススキーマ(テーブル名とカラム)を取得します。すべてのデータを自動的に読み込み、SQLを構築することができます。それは実装するのが難しいことではありません。

関連する問題