601 Stimmen

Wie erhält man eine Liste von Spaltennamen in einer Sqlite3-Datenbank?

Ich möchte meine iPhone-App auf eine neue Datenbankversion migrieren. Da ich einige Versionen nicht gespeichert habe, muss ich prüfen, ob bestimmte Spaltennamen existieren.

Diese Stackoverflow-Eintrag schlägt vor, die Auswahl zu treffen

SELECT sql FROM sqlite_master
WHERE tbl_name = 'table_name' AND type = 'table'

und analysieren das Ergebnis.

Ist das der übliche Weg? Gibt es Alternativen?

837voto

nevan king Punkte 110579
PRAGMA table_info(table_name);

erhalten Sie eine Liste mit allen Spaltennamen.

359voto

Roland Orre Punkte 2701

Wenn Sie das tun

.headers ON

werden Sie das gewünschte Ergebnis erhalten.

312voto

Wenn Sie eine sqlite-Datenbank haben, verwenden Sie das Befehlszeilenprogramm sqlite3 und diese Befehle:

Um alle Tabellen in der Datenbank aufzulisten:

.tables

So zeigen Sie das Schema für ein bestimmtes tablename :

.schema tablename

147voto

Birdbuster Punkte 1389

Nur für Super-Neulinge wie mich, die sich fragen, wie oder was die Leute meinen mit

PRAGMA table_info('table_name') 

Verwenden Sie dies als vorbereitende Anweisung wie unten gezeigt. Dadurch wird eine Tabelle ausgewählt, die wie diese aussieht, aber mit den Werten Ihrer Tabelle gefüllt ist.

cid         name        type        notnull     dflt_value  pk        
----------  ----------  ----------  ----------  ----------  ----------
0           id          integer     99                      1         
1           name                    0                       0

Dabei sind id und name die tatsächlichen Namen Ihrer Spalten. Um diesen Wert zu erhalten, müssen Sie also den Spaltennamen auswählen, indem Sie:

//returns the name
sqlite3_column_text(stmt, 1);
//returns the type
sqlite3_column_text(stmt, 2);

Das gibt den Namen der Spalte der aktuellen Zeile zurück. Um alle zu erfassen oder die gewünschte Spalte zu finden, müssen Sie alle Zeilen durchlaufen. Der einfachste Weg, dies zu tun, wäre der folgende.

//where rc is an int variable if wondering :/
rc = sqlite3_prepare_v2(dbPointer, "pragma table_info ('your table name goes here')", -1, &stmt, NULL);

if (rc==SQLITE_OK)
{
    //will continue to go down the rows (columns in your table) till there are no more
    while(sqlite3_step(stmt) == SQLITE_ROW)
    {
        sprintf(colName, "%s", sqlite3_column_text(stmt, 1));
        //do something with colName because it contains the column's name
    }
}

133voto

Owen Pauling Punkte 10598

Wenn Sie möchten, dass die Ausgabe Ihrer Abfragen Spaltennamen enthält und korrekt als Spalten ausgerichtet ist, verwenden Sie diese Befehle in sqlite3 :

.headers on
.mode column

Sie erhalten dann eine Ausgabe wie:

sqlite> .headers on
sqlite> .mode column
sqlite> select * from mytable;
id          foo         bar
----------  ----------  ----------
1           val1        val2
2           val3        val4

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X