614 votes

Comment obtenir une liste des noms de colonne sur sqlite3 / iPhone ?

Je veux migrer mon application iPhone vers une nouvelle version de la base de données. Étant donné que je n’ai pas une version enregistrée, j’ai besoin de vérifier s’il existe certains noms de colonnes.

Cette entrée de Stackoverflow suggère de faire la sélection

et d’analyser le résultat.

Est-ce la façon courante ? Solutions de rechange ?

848voto

nevan king Points 46410
<pre><code></code><p>vous obtiendrez une liste de tous les noms de colonne.</p></pre>

149voto

Birdbuster Points 150

Juste super pour les noobs comme moi vous vous demandez comment ce que l'on entend par

PRAGMA table_info('table_name') 

Vous souhaitez utiliser comme votre instruction prepare comme indiqué ci-dessous. Ce faisant sélectionne une table qui ressemble à cette exception est rempli avec les valeurs relatives à votre table.

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

Où l'id et le nom sont les noms réels de vos colonnes. Donc, pour obtenir cette valeur, vous devez sélectionner le nom de colonne à l'aide de:

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

Qui sera de retour de la ligne en cours de nom de la colonne. Pour saisir tous les ou trouver celui que vous voulez vous avez besoin de parcourir toutes les lignes. La plus simple façon de le faire serait de la manière ci-dessous.

//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
    }
}

9voto

Raamalakshmanan Points 29

vous pouvez utiliser l'instruction Like si vous recherchez une colonne particulière

ex:

 SELECT * FROM sqlite_master where sql like('%LAST%')
 

7voto

Devolus Points 10549

Pour obtenir les informations sur les colonnes, vous pouvez utiliser l'extrait suivant:

 String sql = "select * from "+oTablename+" LIMIT 0";
Statement statement = connection.createStatement();
ResultSet rs = statement.executeQuery(sql);
ResultSetMetaData mrs = rs.getMetaData();
for(int i = 1; i <= mrs.getColumnCount(); i++)
{
    Object row[] = new Object[3];
    row[0] = mrs.getColumnLabel(i);
    row[1] = mrs.getColumnTypeName(i);
    row[2] = mrs.getPrecision(i);
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X