2010-12-29 2 views
2

Mit SQLite3 erkennen, wenn Sie eine Tabelle wie folgt zu erstellen:sqlite3: Wie Rowid alias Spalte (Primärschlüssel)

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

es stellt sich heraus sqlite3_column_type(0) immer SQLITE_NULL zurückgibt. Wenn ich read on a bit, kann dies von Entwurf sein, da diese Spalte tatsächlich ein Alias ​​für das interne Feld rowid ist.

Noch, was ist der programmatische Weg, um eine bestimmte Spalte zu bestimmen, ist ein/der Alias ​​zum rowid Feld?

(vielleicht verwandten, kann ich sqlite3_column_type(x)==SQLITE_NULL verwenden, um festzustellen, ob das Feld des Datensatzes aktuellenNULL hält?)

Antwort

2

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

A PRIMARY KEY Spalte nur Gemäß wird eine integer primären Schlüssel, wenn der angegebene Typname genau "INTEGER" ist. Andere Integer-Typ Namen wie „INT“ oder „BIGINT“ oder „SHORT INTEGER“ oder „unsigned integer“ bewirkt, dass die primären Schlüsselspalte als gewöhnliche Tabellenspalt mit ganzzahligen Affinität verhalten und ein eindeutiger Index nicht als ein Alias ​​für die Rowid.

Also in Ihrem Fall ist es "int" so ungültig alias

+0

versucht 'CREATE TABLE test (id INTEGER PRIMARY KEY, ...)' und das funktioniert, danke! –

+0

@StijnSanders - haben Sie jemals eine Antwort gefunden auf "was ist der programmatische Weg, um eine bestimmte Spalte zu bestimmen, ist der Alias ​​zu" rowid ""? Ich möchte testen/bestätigen 'id integer primary key' ist das gleiche wie 'id integer primary key asc' – aaaaaa

+0

Nein, aber im Nachhinein, ich glaube nicht, dass Sie jemals brauchen/wollen. Die Antwort ist in der Quelle. Überprüfe, was sqlite mit einem C-Debugger für "Integer Primärschlüssel asc" tut und du wirst es wissen. –