2009-03-03 7 views

Répondre

100

Ce que vous cherchez s'appelle le dictionnaire de données. Dans sqlite une liste de toutes les tables sont disponibles en questionnant la table 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) 

Pour obtenir des informations sur colonne, vous pouvez utiliser l'instruction pragma table_info(table_name) (ou voir?):

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

Pour plus d'informations sur la pragma déclarations, voir le documentation.

+5

Great! Maintenant, comment cela se fait en dehors de la ligne de commande? Comment cela se fait-il dans mon propre programme C? –

+0

Comment puis-je implémenter le même que ci-dessus dans Objective-c –

+1

@Nag, je pense que vous SQLite devrait simplement traiter ces commandes comme SQL ordinaire, le traiter en conséquence, et vous renvoyer un ensemble de résultats. –

16

juste aller dans votre coquille sqlite:

$ sqlite3 path/to/db.sqlite3 

puis vient de frapper

sqlite> .schema 

et vous obtiendrez tout.

43

est ici la manière simple:

.schema <table> 
+3

Cela devrait vraiment être la réponse. –

+10

@EhteshChoudhury non il ne devrait pas, la question demande une requête SQL et ce n'est pas un. – jazzpi

16

La question est vieux, mais ce qui suit n'a pas encore été mentionnés.

Une autre façon pratique dans de nombreux cas, est de transformer les en-têtes par:

sqlite> .headers on 

Ensuite,

sqlite> SELECT ... FROM table 

affichera un titre montrant tous les champs sélectionnés (tous si vous SELECT *) au haut de la sortie.

1

bâtiment au-dessus, vous pouvez le faire à la fois:

sqlite3 yourdb.db ".schema" 

Cela vous donnera le SQL pour créer la table, ce qui est effectivement une liste des colonnes.

0

Je sais, ça fait longtemps mais il n'est jamais trop tard ... J'ai eu une question similaire avec TCL en tant qu'interprète et après plusieurs recherches, je n'ai rien trouvé de bon pour moi. Je propose donc quelque chose basé sur PRAGMA, sachant que votre DB est « principale »

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

et l'utilisation du réseau pour obtenir une liste

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