2012-11-06 6 views
6

Ich denke, das ist eine einfache Frage, aber ich fand nicht die Antwort in der FMDB Git-Seite. Wenn Sie den Befehl:SQLite FMDB erstellen Tabelle - Anfänger iOS

[database executeUpdate:@"create table T_table(name text primary key, age int)"]; 

hat FMDB oder SQLite eine Art von Überprüfung, um zu sehen, ob die Tabelle bereits vorhanden ist?

Kann ich diese Methode in meinem Klasseninitialisierer aufrufen, ohne mehr als eine Tabelle zu erstellen?

Sorry, wenn dumme Frage.

Antwort

0

Immer, wenn Sie den Befehl CREATE TABLE an FMDB übergeben, wird er intern in eine entsprechende SQLite-Abfrage konvertiert (für die Sie sich keine Sorgen machen müssen).

Gemäß der offiziellen Dokumentation auf SQLite Webseite gegeben, heißt es:

"It is usually an error to attempt to create a new table in a database that already contains a table, index or view of the same name."

Also, wenn Sie versuchen, eine andere Tabelle mit dem gleichen Namen zu erstellen, wird SQLite einen Fehler aus, zu sagen:

create table test_table (test_no NUMBER, test_name TEXT); //Table created 

/* Now, try creating the table again */ 
create table test_table (test_no NUMBER, test_name TEXT); 

Sie erhalten den folgenden Fehler.
Fehler: Tabelle test_table existiert bereits

So, SQLite überprüft das Vorhandensein der Tabelle, wird es nicht eine andere Tabelle mit demselben Namen ermöglichen.

Auch hier können Sie auf die Dokumentation zugreifen, um weitere Details zu erhalten.

Quellehttp://www.sqlite.org/lang_createtable.html

+1

Vielen Dank für die ausführliche Antwort. – pedros

+0

Ich bin froh, Ihnen helfen zu können. –

14

Eine andere Lösung ist, Ihre Abfrage zu ändern:

create table if not exists test_table (test_no NUMBER, test_name TEXT); 

oder Sie für die Existenz überprüfen mit kann:

select sql from SQLITE_MASTER where name = 'test_table' 

Und sehen, wenn Sie bekommen irgendwelche Ergebnisse zurück.