902 votos

¿Cómo puedo comprobar en SQLite si una tabla existe?

Cómo lo hago, de forma fiable ¿Revisar en SQLite si existe una tabla de usuario en particular?

No estoy pidiendo formas poco fiables como comprobar si un "select *" en la tabla devolvió un error o no ( ¿es esto siquiera una buena idea? ).

La razón es la siguiente:

En mi programa, necesito crear y luego rellenar algunas tablas si no existen ya.

Si ya existen, tengo que actualizar algunas tablas.

¿Debería tomar algún otro camino en su lugar para señalar que las tablas en cuestión ya han sido creadas - digamos por ejemplo, creando/poniendo/configurando una determinada bandera en mi archivo de inicialización/configuración del programa en el disco o algo así?

¿O mi enfoque tiene sentido?

1031voto

PoorLuzer Puntos 6421

Me perdí esa entrada de preguntas frecuentes.

De todos modos, para futuras referencias, la consulta completa es:

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

557voto

arthur johnston Puntos 2050

Si utiliza la versión 3.3+ de SQLite puede crear fácilmente una tabla con:

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

Del mismo modo, se puede eliminar una tabla sólo si existe utilizando:

drop table if exists TableName

169voto

Stephen Quan Puntos 4429

Una variación sería utilizar SELECT COUNT(*) en lugar de SELECT NAME, es decir

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

Esto devolverá 0, si la tabla no existe, 1 si existe. Esto es probablemente útil en su programación ya que un resultado numérico es más rápido / más fácil de procesar. Lo siguiente ilustra cómo se haría esto en Android usando SQLiteDatabase, Cursor, rawQuery con parámetros.

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

43voto

Galwegian Puntos 29966

Podrías intentarlo:

SELECT name FROM sqlite_master WHERE name='table_name'

32voto

Anton Gogolev Puntos 59794

Ver este :

SELECT name FROM sqlite_master
WHERE type='table'
ORDER BY name;

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X