2012-01-17 10 views
0

を考える:テーブルT sqlite:選択した列の列IDを取得する方法は?

  • Tが10列を含むテーブルと

    • のSQLiteデータベース - C0C1 ... C9を。
    • OK

  • select C3,C2 from Tに対応する sqlite3_stmtポインタが、私はこのようなメソッドの sqlite3_column_XXXファミリを使用して、選択した列の値( http://www.sqlite.org/capi3ref.html#sqlite3_column_blob)、取得することができます:私は必要なもの

    sqlite3_stmt *s; 
    sqlite3_prepare_v2(db, query, sizeof(query), &s, NULL); 
    while ((result = sqlite3_step(s)) == SQLITE_ROW) 
    { 
        const char *v3 = reinterpret_cast<const char *>(sqlite3_column_text(s, 0); 
        const char *v2 = reinterpret_cast<const char *>(sqlite3_column_text(s, 1); 
    } 
    

    です選択された列の実際のインデックス。v3の場合は3、v2の場合は2です。

    動機付け:返された文字列値を実際の列型に解析できるようにしたいと考えています。実際、私のスキーマでは、c3datetimeであり、sqliteはTEXTとして扱います。だから、sqlite3_column_type(s, 0)戻りSQLITE3_TEXTが、(pragma table_info(T)から入手可能)テーブルメタデータは、カラムの意図タイプである文字列datetimeを保持します。それを知って、返された文字列を、例えば、エポック以降のそれぞれのunix時間に解析することができます。

    しかし、どのように私は、テーブルの列のインデックスにクエリの列インデックスにマッピングすることができます

    • クエリ列0から>テーブルの列3
    • クエリ列1から>テーブルのカラム2

    をありがとう。

    +0

    あなたが関心の高いレベルでの情報の並べ替えを埋め込むと考えたことがありますか? *テーブルバーからfooを問い合わせることを知っている*のコードは、ある列の日付が必要だと宣言することができます。それ以外の場合は、実際には設計されていないシステムからのイントロスペクションに頼るか、それをうまくサポートすることが期待されます。 –

    答えて

    1

    あなたは結果STMTから宣言された列のデータ型を取得するためのSQLite C関数sqlite3_column_decltypeを使用することができますか?それは具体的にあなたの質問に答えるものではありません(元の列のインデックスを取得する)が、あなたが必要とするものを達成する別の方法かもしれませんか?

    +0

    これは十分です。 – mark

    関連する問題