我有以下代码,它会产生如下运行时错误。为什么呢?
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
答案 0 :(得分:24)
确保表格名称为android_metadata
,列名为locale
,您可以将en_US作为locale
的值插入。
或者更确切地说执行此sql语句:
CREATE TABLE "android_metadata" ("locale" TEXT DEFAULT 'en_US');
编辑:如果使用SQLiteDatabase.NO_LOCALIZED_COLLATORS标志调用openDatabase(),则不需要使用此表,否则您需要使用此表。
请参阅setLocale()。
答案 1 :(得分:8)
当打开只读数据库及其尚未创建时,请使用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表。
答案 2 :(得分:5)
使用SQLiteDatabase.NO_LOCALIZED_COLLATORS标志调用openDatabase(),这是我上次遇到问题时所做的...