2010-08-17 13 views
7

Otwieram plik bazy danych i potencjalnie go tworzę, jeśli nie istnieje.Jak sprawdzić, czy tabela istnieje w sqlite3 C++ API?

Ale z jakiegoś powodu nie tworzy to tabeli. Jakieś pomysły?

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); 

Nie mam tego tutaj, tak, sprawdzam kod powrotu w każdym punkcie. Nie ma błędów.

Być może jest lepszy sposób, aby to osiągnąć?

+1

Wow, uważasz, że zlokalizowane? otrzymałem 5 odpowiedzi dla osób o reputacji powyżej 5 tys., co jest zaskakujące. i tak .... – Matt

Odpowiedz

9

Wariacja na innym danej odpowiedzi:

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

Wrócimy 0 jest tabela nie istnieje, 1 jeśli to robi.

2

Wygląda na to, że brakuje ci prawego nawiasu w SQL. Powinno być:

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

Przykro nam, powyższy przykład nieco różni się od rzeczywistego, aby ukryć, dla kogo pracuję. W rzeczywistym kodzie tabela tworzenia nie działa nadal. – Matt

0

Odpowiadając na moje własne pytanie.

Nie znajduje to odzwierciedlenia w powyższym kodzie. Właściwie to działało przez cały czas. Ale miałem literówkę na bazie danych, której używałem. Dlatego, gdy sprawdziłem go za pomocą narzędzia wiersza poleceń sqlite3, nie zawierało ono tabeli ani żadnych oczekiwanych danych.

Jednak jestem ciekawy, czy istnieje funkcja, która pozwoli mi sprawdzić, czy tabela istnieje, czy nie.

5

wykonać następujące SQL:

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

Jeśli pojawi się wiersz wówczas tabela istnieje. Jeśli zestaw wyników jest pusty, nie jest.

Powiązane problemy