外部SQLite文件内容访问错误

vns*_*tty 6 sqlite android

我有以下代码,它给出了如下运行时错误.为什么?

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

运行时错误:

: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
Run Code Online (Sandbox Code Playgroud)

Ste*_*teD 24

确保表名称android_metadata在那里,使用列名称locale,您可以插入en_US作为值locale.

或者更确切地说执行此sql语句:

CREATE TABLE "android_metadata" ("locale" TEXT DEFAULT 'en_US');
Run Code Online (Sandbox Code Playgroud)

编辑:如果使用SQLiteDatabase.NO_LOCALIZED_COLLATORS标志调用openDatabase(),则不需要使用此表,否则您将需要使用此表.

请参见setLocale().


Dan*_*son 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){} 
Run Code Online (Sandbox Code Playgroud)

如果使用写入权限打开数据库,将创建android_metadata表.


小智 5

使用SQLiteDatabase.NO_LOCALIZED_COLLATORS标志调用openDatabase(),这是我上次遇到问题时所做的...