2011-04-18 8 views
0

テーブル内のフィールドを取得しようとしていますが、テーブルが空であってもそのデータを取得する必要があります。C言語のempyテーブルのSQLite列名

sqlite3_table_column_metadataはオプションではありません(SQLite3の私のバージョンにコンパイルされていませんでした)。

この情報を取得する手口はありますか?

答えて

2
PRAGMA table_info(table_name); 

HERESにリンク列名のリストを返します:あなたはあなただけのソースをダウンロードして、あなたが好きなオプションでコンパイルすることができますローカルで実行している場合

http://www.sqlite.org/pragma.html#pragma_table_info

+0

ありがとうございました。私はすでにsqlite3_prepareを使用して、ステップ関数の前にsqlite3_column_decltype、sqlite3_column_count、sqlite3_column_nameを使ってテーブルの詳細を取得できます。 – Freaktor

1

を。しかし、それがオプションではない場合でも、メタデータを取得する方法はまだいくつかあります。

sqlite_masterテーブルをクエリできますが、データは可能な限りフレンドリーな形式ではありません。

select sql 
from sqlite_master 
where type='table' and name='your-table-name'; 

このクエリは、CREATE TABLEステートメントを返します。期待されるフォーマットの驚き。

cインターフェイスから「ドット」コマンドを発行できる場合は、列ヘッダーをオンにしてから、テーブルをクエリできます。これは、sqliteプロンプトから見たものです。

sqlite> .headers on 
sqlite> select * from file_stats; 
date|file_id|num_lines 

だけで列名を持つことによって、データ型を取得するためのデッド簡単な方法はありません。 typeof()関数は、テーブルにデータがなければ何も返しません。

私はプラグマtable_info()関数も含めようとしていましたが、Trevorはそれを私に打ち明けました。あなたがc apiからプラグマ文を発行できるかどうかはわかりません。