2010-12-29 11 views
2

を検出する:sqlite3の:あなたはこのようなテーブルを作成した場合どのように、SQLite3のを使用してROWIDエイリアス列(主キー)

CREATE TABLE MyTable (
id int primary key, 
--define other columns here-- 
) 

それはsqlite3_column_type(0)は常にSQLITE_NULLを返し判明します。 I read on a bitの場合、実際にはこの列は内部rowidフィールドのエイリアスであるため、これは設計によるものです。

まだ、特定の列がrowidフィールドの/別名であると判断するためのプログラム的な方法は何ですか?

(おそらく関連する、私は現在レコードのフィールドがNULLを保持しているかどうかを決定するためにsqlite3_column_type(x)==SQLITE_NULLを使用できますか?)

答えて

2

よれhttp://www.sqlite.org/draft/lang_createtable.html#rowid

PRIMARY KEY列のみ 整数プライマリになりますキーが宣言された タイプ名が正確に "INTEGER"の場合「INT」または 「BIGINT」または「SHORT INTEGER」または 「符号なし整数」は、主 キー列がないとして、整数親和性および ユニークインデックスを持つ通常の テーブルの列として動作するようになりような他の 整数型の名前rowidの の別名です。

だからあなたの場合には、それは "INT" ですので、無効なエイリアス

+0

は 'TABLEテストを作成します(ID INTEGER PRIMARY KEY、...)を試してみました'、それは動作しますが、ありがとう! –

+0

@StijnSanders - "特定の列を決定するためのプログラム的な方法は' 'rowid'のエイリアスですか? 'id integer primary key'が' id integer primary key asc'と同じであることをテスト/確認したいと思います。 – aaaaaa

+0

いいえ、しかし、今戻って考えると、私はあなたが必要とするべきではないと思います。答えはソースにあります。 Cのデバッガを使ってsqliteが 'integer primary key asc'に何をするのかを確認してください。 –

関連する問題