¿Cómo puedo, de manera confiable , verifico en SQLite si existe una tabla de usuario en particular?
No estoy pidiendo formas poco confiables como verificar si un "select *" en la tabla devolvió un error o no (¿es incluso una buena idea?).
La razón es así:
En mi programa, necesito crear y luego llenar algunas tablas si aún no existen.
Si ya existen, necesito actualizar algunas tablas.
¿Debería tomar otra ruta para indicar que las tablas en cuestión ya se han creado, por ejemplo, creando / colocando / configurando un determinado indicador en el archivo de configuración / inicialización de mi programa en el disco o algo así?
¿O mi enfoque tiene sentido?
sqlite3.OperationalError
, por lo que debe analizar el mensaje de error para asegurarse de que es, por ejemplo, el mensaje "tabla TABLE_NAME ya existe" cuando crea una tabla, y si no, vuelva a plantear el error y creo que no hay garantía de que la redacción del error no cambie.Respuestas:
Me perdí esa entrada de preguntas frecuentes.
De todos modos, para referencia futura, la consulta completa es:
¿Dónde
{table_name}
está el nombre de la tabla para verificar?Sección de documentación para referencia: Formato de archivo de base de datos. 2.6. Almacenamiento del esquema de base de datos SQL
fuente
Si está utilizando SQLite versión 3.3+, puede crear fácilmente una tabla con:
Del mismo modo, puede eliminar una tabla solo si existe mediante el uso de:
fuente
create table
declaración está incompleta (falta la especificación de las columnas de la tabla).Una variación sería usar SELECT COUNT (*) en lugar de SELECT NAME, es decir
Esto devolverá 0, si la tabla no existe, 1 si existe. Esto probablemente sea útil en su programación ya que un resultado numérico es más rápido / fácil de procesar. Lo siguiente ilustra cómo haría esto en Android usando SQLiteDatabase, Cursor, rawQuery con parámetros.
fuente
COUNT(*)
) es fácil de procesar, es aún más fácil devolver la existencia de una fila o no; si hay una fila allí, entonces existe, si no hay fila, no existe. (Ya verifica si hay errores en moveToFirst, por lo que el trabajo se realizaría en ese punto.)Tu podrías intentar:
fuente
SQLiteReader reader = cmd.ExecuteReader();
y haga undt.Load(reader)
(dondedt
es aDataTable
). Encontré que da estaObject reference is not an instance of an object
excepción.Load()
si no se encuentra la tabla. En su lugar, use aySQLiteDataAdapter adapter = new SQLiteDataAdapter(cmd);
doadapter.Fill(ds)
, dondeds
es aDataSet
. A continuación, puede ver sids.Tables.Count > 0
, yreturn ds.Tables[0];
si es así (oelse return null
). Entonces puedes verificar esoDataTable
por sernull
, sidt.Rows != null
y sidt.Rows.Count>0
Utilizar:
Si la tabla resultante está vacía, entonces
your_table_name
no existe.Documentación:
Salida de ejemplo:
fuente
Los nombres de tabla de SQLite no distinguen entre mayúsculas y minúsculas, pero la comparación distingue entre mayúsculas y minúsculas de forma predeterminada. Para que esto funcione correctamente en todos los casos, debe agregar
COLLATE NOCASE
.fuente
Si obtiene un error "la tabla ya existe", realice los cambios en la cadena de SQL como se muestra a continuación:
De esta manera puede evitar las excepciones.
fuente
Mira esto :
fuente
Si está usando fmdb , creo que puede importar FMDatabaseAdditions y usar la función bool:
fuente
El siguiente código devuelve 1 si la tabla existe o 0 si la tabla no existe.
fuente
Tenga en cuenta que para verificar si existe una tabla en la base de datos TEMP, debe usar en
sqlite_temp_master
lugar desqlite_master
:fuente
Aquí está la función que usé:
Dado un objeto SQLDatabase = db
fuente
Usa este código:
Si el recuento de matriz devuelto es igual a 1, significa que la tabla existe. De lo contrario no existe.
fuente
Nota: Esto está funcionando ahora en mi Mac con Python 3.7.1
fuente
table_name
no se proporcione desde una fuente no utilizada (como la entrada del usuario), de lo contrario será vulnerable a la inyección de SQL. Siempre es mejor usar parámetros en lugar de técnicas de manipulación de textoUtilizar
para evitar que se lean todos los registros.
fuente
Puede escribir la siguiente consulta para verificar la existencia de la tabla.
Aquí 'nombre_tabla' es el nombre de la tabla que creó. Por ejemplo
y verifica
fuente
La forma más confiable que he encontrado en C # en este momento, usando el último paquete nuget sqlite-net-pcl (1.5.231) que está usando SQLite 3, es la siguiente:
fuente
Usar una simple consulta SELECT es, en mi opinión, bastante confiable. Sobre todo, puede verificar la existencia de tablas en muchos tipos de bases de datos diferentes (SQLite / MySQL).
Tiene sentido cuando puede usar otro mecanismo confiable para determinar si la consulta tuvo éxito (por ejemplo, consulta una base de datos a través de QSqlQuery en Qt ).
fuente
La función c ++ comprueba db y todas las bases de datos adjuntas para ver si existen tablas y columnas (opcionalmente)
Editar: Recientemente descubrí la función sqlite3_table_column_metadata. Por lo tanto
fuente
Este es mi código para SQLite Cordova:
Y el otro:
fuente
Pensé que pondría mis 2 centavos en esta discusión, incluso si es bastante antigua. Esta consulta devuelve el escalar 1 si la tabla existe y 0 en caso contrario.
fuente
La tabla existe o no en la base de datos en Swift
fuente