2011-03-04 15 views
6

Tengo el siguiente código, da un error de tiempo de ejecución como el siguiente. ¿Por qué?External SQLite File access accessing error

try{ 
String myPath = DB_PATH + DB_NAME; 
mDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); 
}catch(SQLiteException e){} 

error Tiempo de ejecución:

:sqlite returned: error code = 1, msg = no such table: android_metadata 
:SELECT locale FROM android_metadata failed 
:Failed to setLocale() when constructing, closing the database 
:android.database.sqlite.SQLiteException: no such table: android_metadata 
+0

Una solución puede ser, use openOrCreateDatabase en lugar de openDatabase. Esto creará la base de datos si no está disponible. – Mudassir

Respuesta

24

Asegúrese de que el nombre de la tabla android_metadata está ahí, con un nombre de columna locale, podría insertar en_US por la relación calidad locale.

O más bien ejecutar esta instrucción SQL:

CREATE TABLE "android_metadata" ("locale" TEXT DEFAULT 'en_US'); 

Editar: Si llama openDatabase() con la bandera SQLiteDatabase.NO_LOCALIZED_COLLATORS, no tendría que tener esta tabla, de lo contrario tendrá que tener esta mesa alrededor .

Ver setLocale().

+1

no .. ¿por qué esa columna es necesaria? en mi aplicación, estoy accediendo a un archivo .sqlite remoto y mostrándolo. no contiene ningún archivo. ¿Es obligatorio para Android? – vnshetty

+0

La respuesta ha sido actualizada. – SteD

+1

sí ... ¡tienes razón! Pero ¿cuál es el significado de esa tabla ... – vnshetty

5

openDatabase llamada() con la bandera SQLiteDatabase.NO_LOCALIZED_COLLATORS, esto es lo que hice cuando me encontré con el problema de la última vez ...

8

Cuando lectura abierto sólo db y no es ya creados, NO_LOCALIZED_COLLATORS uso.

try{ 
    String myPath = DB_PATH + DB_NAME; 
    mDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY+ SQLiteDatabase.NO_LOCALIZED_COLLATORS); 
}catch(SQLiteException e){} 

android_metadata table se creará si abre la base de datos con permisos de escritura.

+0

el "+" en la adición de banderas es correcto? probablemente debería ser un quirófano "|" no es así? –

+0

es el símbolo de tubería, en bits o | – spy

Cuestiones relacionadas