android android-sqlite android-5.0-lollipop android-logcat

La base de datos SQLite proporciona un índice automático de advertencia en<table_name>(columna) Después de actualizar Android L



android-sqlite android-5.0-lollipop (2)

Esta fue la primera publicación mientras estaba investigando este problema. Aunque tengo un proyecto de C # y podría no ser relevante para el OP, pensé que aún podría ser útil para alguien.

Para aquellos que se preguntan por qué el mensaje sigue apareciendo, aunque un índice fue creado explícitamente; tal vez su consulta está utilizando una intercalación diferente.

Tenía una tabla con una columna de texto y una consulta de selección con una instrucción where que especificaba where name = @var1 COLLATE NOCASE . Esto activó las advertencias, ya que el índice que había creado era una intercalación predeterminada.

Por lo tanto, la reescritura del índice o de la declaración create table para especificar nocase para esa columna hizo que la advertencia desapareciera.

Actualicé mi Nexus 7 con Android 5.0 Lollipop, antes de que mi aplicación funcionara bien con la base de datos SQLite, pero ahora siempre que ejecuto cualquier tipo de consulta, me da un error log cat como:

12-09 12:37:04.942: E/SQLiteLog(13041): (284) automatic index on area(server_id) 12-09 12:37:04.942: E/SQLiteLog(13041): (284) automatic index on account(area_id) 12-09 12:37:04.942: E/SQLiteLog(13041): (284) automatic index on staff_visit(account_id) 12-09 12:37:04.942: E/SQLiteLog(13041): (284) automatic index on ordertab(account_id) 12-09 12:37:04.960: E/SQLiteLog(13041): (284) automatic index on area(server_id) 12-09 12:37:04.960: E/SQLiteLog(13041): (284) automatic index on account(area_id) 12-09 12:37:04.960: E/SQLiteLog(13041): (284) automatic index on staff_visit(account_id) 12-09 12:37:04.960: E/SQLiteLog(13041): (284) automatic index on ordertab(account_id) 12-09 12:37:04.978: E/SQLiteLog(13041): (284) automatic index on area(server_id) 12-09 12:37:04.978: E/SQLiteLog(13041): (284) automatic index on account(area_id) 12-09 12:37:04.978: E/SQLiteLog(13041): (284) automatic index on staff_visit(account_id) 12-09 12:37:04.978: E/SQLiteLog(13041): (284) automatic index on ordertab(account_id)

Entonces, ¿es el error de cualquier error Lollipop? Creo que sí porque no actualicé mi código antes y después de actualizar este sistema operativo.


La indexación automática se introdujo en sqlite 3.7.17. Una versión de sqlite con esta característica solo se incluyó en la vista previa del desarrollador de Android L. Es por eso que recibe el mensaje solo en Lollipop pero no antes. Incluso si se registra como un error, en realidad es solo un mensaje.

Básicamente, la indexación automática entra en juego cuando se realizan búsquedas en columnas no indexadas. sqlite supone que hay tantos datos que generar un índice temporal es más barato que la búsqueda sin formato.

Considere agregar índices explícitos y permanentes para sus columnas de búsqueda con CREATE INDEX . Por ejemplo, después de CREATE TABLE :

CREATE INDEX indexname ON tablename(columnname);

donde puede elegir el nombre de tablename(columnname) de los mensajes de autoindex producidos por sqlite.

Si solo quieres recuperar el comportamiento anterior, puedes inhabilitar la indexación automática con

PRAGMA automatic_index=off;