Ошибка доступа к содержимому внешнего файла SQLite - PullRequest
6 голосов
/ 04 марта 2011

У меня следующий код, он выдает ошибку во время выполнения, как показано ниже. Почему?

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

Ошибка выполнения:

: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

Ответы [ 3 ]

24 голосов
/ 04 марта 2011

Убедитесь, что имя таблицы android_metadata там, с именем столбца locale, вы можете вставить en_US в качестве значения для locale.

Или, скорее, выполнить этот SQL-оператор:

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

Редактировать: если вы вызываете openDatabase () с флагом SQLiteDatabase.NO_LOCALIZED_COLLATORS, вам не понадобится эта таблица, иначе вам понадобится эта таблица.

См. setLocale () .

8 голосов
/ 27 февраля 2013

Когда открытая база данных только для чтения и она еще не создана, используйте NO_LOCALIZED_COLLATORS.

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

Таблица android_metadata будет создана, если вы откроете базу данных с правами на запись.

5 голосов
/ 09 мая 2012

вызов openDatabase () с флагом SQLiteDatabase.NO_LOCALIZED_COLLATORS, это то, что я сделал, когда столкнулся с проблемой в прошлый раз ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...