【问题标题】:android sqlite : Failed to change locale for db to 'zh_CN'android sqlite:无法将 db 的语言环境更改为“zh_CN”
【发布时间】:2014-01-16 07:19:20
【问题描述】:

也有类似的问题,

android.database.sqlite.SQLiteException:无法更改语言环境 db 引起:android.database.sqlite.SQLiteDatabaseCorruptException: 数据库磁盘映像格式错误(代码 11)

Failed to change locale for db '/data/data/my.easymedi.controller/databases/EasyMediInfo.db' to 'en_US'

但是我的数据库是android通过SQLiteOpenHelper创建的。它出现在一些设备中。 我想知道什么会导致这个问题,因为我什至无法重现它。 我怎么解决这个问题? 非常感谢!

android.database.sqlite.SQLiteException: Failed to change locale for db '/data/data/com.android.settings/databases/myDB.db' to 'zh_CN'.
at android.database.sqlite.SQLiteConnection.setLocaleFromConfiguration(SQLiteConnection.java:386)
at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:218)
at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193)
at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:804)
at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:789)
at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694)
at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:833)
at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:221)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
at com.example.optimizecenter.packages.e.mO(PackagesManager.java:150)
at com.example.optimizecenter.packages.PackageSyncService.onHandleIntent(PackageSyncService.java:24)
at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.os.HandlerThread.run(HandlerThread.java:60)
Caused by: android.database.sqlite.SQLiteDatabaseCorruptException: database disk image is malformed (code 11)
at android.database.sqlite.SQLiteConnection.nativeExecuteForString(Native Method)
at android.database.sqlite.SQLiteConnection.executeForString(SQLiteConnection.java:634)
at android.database.sqlite.SQLiteConnection.setLocaleFromConfiguration(SQLiteConnection.java:367)
... 18 more

这是我的助手类。

public class PackageDataBaseHelper extends SQLiteOpenHelper {

    public PackageDataBaseHelper(Context context) {
        super(context, PackageColumns.DB_NAME, null, PackageColumns.DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        StringBuilder sb = new StringBuilder();
        sb.append("create table ");
        sb.append(PackageColumns.TABLE_PACKAGE);
        sb.append(" (");
        sb.append(PackageColumns._ID + " integer primary key autoincrement, ");
        sb.append(PackageColumns.COLUMN_APPLICATION_LABEL + " TEXT ,");
        sb.append(PackageColumns.COLUMN_PACKAGE_NAME + " TEXT ,");
        sb.append(PackageColumns.COLUMN_VERSION_NAME + " TEXT ,");
        sb.append(PackageColumns.COLUMN_VERSION_CODE + " INTEGER ,");
        sb.append(PackageColumns.COLUMN_IC_LAUNCHER + " BOLD");
        sb.append(");");
        db.execSQL(sb.toString());
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // ignore
    }

}

【问题讨论】:

  • 嘿,这个问题有什么更新吗?

标签: android sqlite corruption


【解决方案1】:
SQLiteDatabase db=SQLiteDatabase.openDatabase("/data/data/com.android.settings/databases/myDB.db", null,SQLiteDatabase.NO_LOCALIZED_COLLATORS|SQLiteDatabase.CREATE_IF_NECESSARY);

在您的代码中尝试此代码示例..

如果你有 sqlite 浏览器,打开你的数据库.. 在您的数据库中,android_metadata 表的区域设置似乎不是 en_US

【讨论】:

  • 使用我的代码,很多设备都可以正常工作。但是有些用户报告了这个错误,我无法重现它。当我在 android 设置中更改电话语言时,android_metadata 的语言环境会自行更改,并且效果很好。我什至删除了locale或者填了一些无意义的词,APP很好用,改成当前手机语言...
  • 小米2s。但是只有几百,或者几百万小米2S就可以了......
  • SQLiteDatabase 数据库; db.setLocale(Locale.CHINA);在创建/打开数据库时测试此代码..
  • 我不知道如何解决相同型号的问题-某些设备出现错误..我认为某些设备不允许更改 'zh_CN;
  • 谢谢!我会尝试构建这种场景来测试它!可以给点意见吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多