android.database.sqlite.SQLiteException: Failed to change locale for db '/storage/sdcard0/xx/xxx.db'
2015-04-27 20:41
477 查看
诡异的Exception,首先一次是发现在 4.0.3 和 4.0.4 的版本中。
按许多网上的解决方案:
由SQLiteConnection.java 可知,设置该 flag 后, setLocale这个方法将不会执行,故不会抛出该异常
得以解决。
但 5.0 之后发现在部分特殊机型上 (努比亚 Z9 mini , 酷派大神 F2 ) 均为5.0.2 的版本上也出现了该问题。
上面的方案就无法解决问题了。
并且使用上面的open方式后,即使改回OPEN_READWRITE 也会抛出这个异常 :
最后只能把原本存在sd卡的数据库改到 data/data/com.XX 的路径下存放咯,未找到根本原因
按许多网上的解决方案:
//使用 SQLiteDatabase.CREATE_IF_NECESSARY | SQLiteDatabase.NO_LOCALIZED_COLLATORS 的方式 去open DataBase private SQLiteDatabase openOrCreateDatabase(String path, CursorFactory factory) { // 4.0.x 使用特殊方式创建资源 Android 4.0.3, 4.0.4 15 ; 4.0, 4.0.1, 4.0.2 14 if (android.os.Build.VERSION.SDK_INT == 14 || android.os.Build.VERSION.SDK_INT == 15) { return SQLiteDatabase.openDatabase(path, factory, SQLiteDatabase.CREATE_IF_NECESSARY | SQLiteDatabase.NO_LOCALIZED_COLLATORS); } else { return mContext.openOrCreateDatabase(path, SQLiteDatabase.OPEN_READWRITE, factory); } }
由SQLiteConnection.java 可知,设置该 flag 后, setLocale这个方法将不会执行,故不会抛出该异常
private void setLocaleFromConfiguration() { if ((mConfiguration.openFlags & SQLiteDatabase.NO_LOCALIZED_COLLATORS) != 0) { return; } ... }
得以解决。
但 5.0 之后发现在部分特殊机型上 (努比亚 Z9 mini , 酷派大神 F2 ) 均为5.0.2 的版本上也出现了该问题。
上面的方案就无法解决问题了。
并且使用上面的open方式后,即使改回OPEN_READWRITE 也会抛出这个异常 :
SQLiteReadOnlyDatabaseException: attempt to write a readonly database
最后只能把原本存在sd卡的数据库改到 data/data/com.XX 的路径下存放咯,未找到根本原因
相关文章推荐
- android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code
- android.database.sqlite.SQLiteException: Can't upgrade read-only database from version 0 to 1:解决
- android.database.sqlite.SQLiteException: table has no column XXX (code 1)问题解决方法
- [置顶] System.err: android.database.sqlite.SQLiteCantOpenDatabaseException: unable to open database file (c
- E/AndroidRuntime(1017): Caused by: android.database.sqlite.SQLiteCantOpenDatabaseException: unable t
- android.database.sqlite.SQLiteException: Can't downgrade database from version 42 to 41
- Android报错:数据库相关 android.database.sqlite.SQLiteException: no such column
- Caused by: android.database.sqlite.SQLiteDatabaseCorruptException: file is encrypted or is not a dat
- SQLite android.database.CursorIndexOutOfBoundsException
- android.database.sqlite.SQLiteException: database is locked
- android.database.sqlite.databaseobjectnotclosedexception:应用程序没有关闭的光标或数据库对象
- android.database.sqlite.SQLiteException: no such column
- android.database.sqlite.SQLiteException: no such table 异常之GreenDao集成
- 07-09 03:16:08.655: E/Database(426): android.database.sqlite.DatabaseObjectNotClosedException: Appli
- Caused by: android.database.sqlite.SQLiteException: unable to open database file
- android.database.sqlite.SQLiteException: table tb_diary2 has no column named recordPath 解决办法
- Android Exception - SQLiteDatabaseLockedException
- 解决 Android 7.0 SQLiteCantOpenDatabaseException: unknown error (code 14)
- android.database.sqlite.SQLiteException: table TB_READ_PERIOD already exists
- android.database.sqlite.SQLiteException: only a single result allowed for