2010-08-17 9 views
7

Ich öffne eine Datenbankdatei und erstelle sie möglicherweise, wenn sie nicht existiert.Wie überprüfe ich, ob eine Tabelle in sqlite3 C++ API existiert?

Aber aus irgendeinem Grund erstellt dies nicht die Tabelle. Irgendwelche Ideen?

const char* sql = "CREATE TABLE IF NOT EXISTS blocks(id text primary_key,length numeric)"; 

sqlite3_stmt *stmt; 
rc = sqlite3_prepare_v2(db_, create_table_sql, -1, &stmt, NULL); 
rc = sqlite3_step(stmt); 

Ich habe es nicht hier durch ja Ich überprüfe den Rückkehrcode an jedem Punkt. Es gibt keine Fehler.

Vielleicht gibt es einen besseren Weg, dies zu erreichen?

+1

Wow, betrachten Sie das lokalisiert? gegeben 5 Antworten mit Leuten mit Ruf über 5k das ist überraschend. trotzdem .... – Matt

Antwort

9

Variation auf eine andere gegebene Antwort:

select count(type) from sqlite_master where type='table' and name='TABLE_NAME_TO_CHECK'; 

Will return 0 Tabelle ist nicht vorhanden ist, 1, wenn es funktioniert.

2

Es sieht so aus, als ob Sie in SQL eine rechte Klammer verpassen. Es sollte sein:

const char* sql = "CREATE TABLE IF NOT EXISTS blocks(id text primary_key,length numeric);"; 
+0

Sorry, das obige Beispiel ist etwas anders als das tatsächliche zu verstecken, für wen ich arbeite. Im eigentlichen Code funktioniert die create table immer noch nicht. – Matt

0

Beantworten Sie meine eigene Frage.

Es ist nicht tatsächlich in dem Code oben wiedergegeben. Es hat tatsächlich die ganze Zeit funktioniert. Aber ich hatte einen Tippfehler in der Datenbank, die ich benutzte. Daher, als ich es mit der Befehlszeile sqlite3 tool untersuchte, enthielt es weder die Tabelle noch irgendwelche der erwarteten Daten.

Allerdings bin ich neugierig, ob es eine Funktion gibt, mit der ich testen kann, ob eine Tabelle existiert oder nicht.

5

Führen Sie die folgende SQL:

select 1 from sqlite_master where type='table' and name='TABLE_NAME_TO_CHECK' 

Wenn Sie eine Zeile dann die Tabelle vorhanden bekommen. Wenn die Ergebnismenge leer ist, dann nicht.

Verwandte Themen