2009-03-03 5 views

risposta

100

Quello che stai cercando si chiama il dizionario dei dati. In SQLite un elenco di tutte le tabelle può essere trovato eseguendo una query tabella sqlite_master

sqlite> create table people (first_name varchar, last_name varchar, email_address varchar); 
sqlite> select * from sqlite_master; 
table|people|people|2|CREATE TABLE people (first_name varchar, last_name varchar, email_address varchar) 

Per ottenere le informazioni di colonna è possibile utilizzare il pragma table_info(table_name) economico (o vedere?):

sqlite> pragma table_info(people); 
0|first_name|varchar|0||0 
1|last_name|varchar|0||0 
2|email_address|varchar|0||0 

Per ulteriori informazioni sul pragma dichiarazioni, vedere documentation.

+5

Grande! Ora, come viene fatto fuori dalla linea di comando? Come viene fatto all'interno del mio programma C? –

+0

come posso implementare come sopra in Objective-C –

+1

@Nag, penserei che SQLite deve solo trattare questi comandi come SQL ordinaria, processo di conseguenza, e restituire un set di risultati. –

16

basta andare nella vostra shell sqlite:

$ sqlite3 path/to/db.sqlite3 

e poi basta premere

sqlite> .schema 

e otterrete tutto.

43

Ecco il modo più semplice:

.schema <table> 
+3

Questa dovrebbe essere la risposta. –

+10

@EhteshChoudhury no non dovrebbe, la domanda richiede una query SQL e questo non è uno. – jazzpi

16

La domanda è vecchia ma il seguente non è stato ancora citato.

Un altro modo conveniente in molti casi è quello di trasformare le intestazioni su da:

sqlite> .headers on 

Poi,

sqlite> SELECT ... FROM table 

visualizzerà un titolo che mostra tutti i campi selezionati (tutto Selezionando *) presso il in cima all'output.

1

costruzione di quanto sopra, si può fare tutto in una volta:

sqlite3 yourdb.db ".schema" 

che vi darà la SQL per creare la tabella, che è effettivamente un elenco delle colonne.

0

Lo so, è passato molto tempo ma non è mai troppo tardi ... Ho avuto una domanda simile con TCL come interprete e dopo varie ricerche, non ho trovato nulla di buono per me. Quindi propongo qualcosa sulla base di PRAGMA, sapendo che il vostro DB è “principale”

db eval { PRAGMA main.table_info(<your table name>) } TBL { puts $TBL(name) } 

E l'uso di matrice per ottenere un elenco

set col_list {} 
db eval { PRAGMA main.table_info(<your table name>) } TBL { lappend col_list $TBL(name) } 
puts $col_list