869 votes

Comment puis-je vérifier dans SQLite, si une table existe?

Comment puis-je, de manière fiable, vérifiez dans SQLite, que l'utilisateur table existe?

Je ne demande pas fiable façons, comme vérifier si un "select *" sur le tableau retourné une erreur ou pas ( est-ce vraiment une bonne idée? ).

La raison en est comme ceci:

Dans mon programme, j'ai besoin de créer, puis de renseigner les quelques tables si elles n'existent pas déjà.

Si elles n'existent déjà, j'ai besoin de mettre à jour des tables.

Dois-je prendre un autre chemin au lieu de signaler que les tableaux en question ont déjà été créés à - dire, par exemple, par la création d'/mettre/réglage d'un certain drapeau dans mon programme d'initialisation/paramètres du fichier sur le disque ou quelque chose?

Ou est-ce que mon approche de sens?

981voto

PoorLuzer Points 6421

Manqué cette entrée de la FAQ.

De toute façon, pour référence future, la requête complète est:

SELECT name FROM sqlite_master WHERE type='table' AND name='table_name';

542voto

arthur johnston Points 2050

Si vous utilisez SQLite version 3.3+ vous permet de créer facilement un tableau avec:

create table if not exists TableName (col1 typ1, ..., colN typN)

De la même manière, vous pouvez supprimer une table seulement si il existe à l'aide de:

drop table if exists TableName

167voto

Stephen Quan Points 4429

Une variante serait d'utiliser SELECT COUNT(*) au lieu de SÉLECTIONNER un NOM, c'est à dire

SELECT count(*) FROM sqlite_master WHERE type='table' AND name='table_name';

Ce sera le retour de 0, si la table n'existe pas, 1 si elle l'est. Cela est probablement utile dans votre programmation, car un résultat numérique est plus rapide / plus facile à traiter. L'exemple suivant illustre la façon dont vous voulez faire cela dans Android à l'aide de SQLiteDatabase, Curseur, rawQuery avec des paramètres.

boolean isTableExists(SQLiteDatabase db, String tableName)
{
    if (tableName == null || db == null || !db.isOpen())
    {
        return false;
    }
    Cursor cursor = db.rawQuery("SELECT COUNT(*) FROM sqlite_master WHERE type = ? AND name = ?", new String[] {"table", tableName});
    if (!cursor.moveToFirst())
    {
        return false;
    }
    int count = cursor.getInt(0);
    cursor.close();
    return count > 0;
}

42voto

Galwegian Points 29966

Vous pourriez essayer:

SELECT name FROM sqlite_master WHERE name='table_name'

22voto

user655489 Points 534

Si vous utilisez fmdb, je pense que vous pouvez simplement importer FMDatabaseAdditions et l'utilisation de la fonction bool [yourfmdbDatabase tableExists:tableName].

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