外部SQLite文件内容访问错误

时间:2011-03-04 07:14:07

标签: android sqlite

我有以下代码,它会产生如下运行时错误。为什么呢?

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 个答案:

答案 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(),这是我上次遇到问题时所做的...