2012-11-06 14 views
6

Penso che questa sia una domanda semplice ma non ho trovato la risposta nella pagina git FMDB. Quando si utilizza il comando:SQLite FMDB creazione tabella - principiante iOS

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

fa FMDB o SQLite fare una sorta di verifica per vedere se la tabella esiste già?

Posso chiamare questo metodo nel mio inizializzatore di classe senza creare più di una tabella?

Scusa se domanda stupida.

risposta

0

Ogni volta che si dà il comando CREATE TABLE a FMDB, esso lo converte internamente in corrispondente query SQLite (per la quale non è necessario preoccuparsi).

Come per la documentazione ufficiale data sul sito web di SQLite, essa afferma:

"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."

Quindi, se si tenta di creare un'altra tabella con lo stesso nome, SQLite genera un errore che dice:

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

Si otterrà il seguente errore.
Errore: tavolo TEST_TABLE esiste già

Così, controlli SQLite per l'esistenza della tabella, esso non consentire a un altro tavolo con lo stesso nome.

Ancora una volta, è possibile fare riferimento alla documentazione per ottenere maggiori dettagli.

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

+1

Grazie per la risposta dettagliata. – pedros

+0

Felice di essere di aiuto. –

14

Un'altra soluzione è quella di modificare la tua ricerca per:

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

oppure, è possibile verificare l'esistenza con:

select sql from SQLITE_MASTER where name = 'test_table' 

E vedere se si ottiene qualsiasi risultato.