安卓:未能setlocale()的施工时,关闭数据库 [英] Android: failed to setLocale() when constructing, closing the database

查看:247
本文介绍了安卓:未能setlocale()的施工时,关闭数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想与一直工作正常,直到今天12种不同的表创建一个数据库。现在,每当我卸载并重新安装它(或者只是清晰的应用程序数据),我得到出现在标题中错误消息后启动我的应用程序的第一次。然而,第二次我得到这个错误,它工作正常后,启动应用程序。 在code波纹管是从中或多或少同为Android的记事本教程中我DatabaseHelper类。

数据库已经在我的活动被打开,我尽量让我的第一个查询后,此错误出现。

的这是什么原因,如何解决它有什么建议?

 私有静态类DatabaseHelper扩展SQLiteOpenHelper {

    私有静态字符串DB_PATH =/数据/数据​​/ my_app /数据库/;

    DatabaseHelper(上下文的背景下){
        超(背景下,DATABASE_NAME,空,DATABASE_VERSION);
    }

    @覆盖
    公共无效的onCreate(SQLiteDatabase DB){
        如果(!checkDataBase()){
            db.execSQL(TABLE_1);
            db.execSQL(TABLE_2);
            db.execSQL(TABLE_3);

            db.execSQL(TABLE_4);
            db.execSQL(TABLE_5);
            db.execSQL(TABLE_6);

            db.execSQL(TABLE_7);
            db.execSQL(TABLE_8);
            db.execSQL(TABLE_9);

            db.execSQL(TABLE_10);
            db.execSQL(TABLE_11);
            db.execSQL(TABLE_12);
        }
    }

    @覆盖
    公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释静态网页){
        Log.w(TAG,从版本升级数据库+ oldVersion +到+动态网页+,这将销毁所有旧数据);
        db.execSQL(DROP TABLE IF EXISTS+ TABLE_1);
        db.execSQL(DROP TABLE IF EXISTS+ TABLE_2);
        db.execSQL(DROP TABLE IF EXISTS+ TABLE_3);

        db.execSQL(DROP TABLE IF EXISTS+ TABLE_4);
        db.execSQL(DROP TABLE IF EXISTS+ TABLE_5);
        db.execSQL(DROP TABLE IF EXISTS+ TABLE_6);

        db.execSQL(DROP TABLE IF EXISTS+ TABLE_7);
        db.execSQL(DROP TABLE IF EXISTS+ TABLE_8);
        db.execSQL(DROP TABLE IF EXISTS+ TABLE_9);

        db.execSQL(DROP TABLE IF EXISTS+ TABLE_10);
        db.execSQL(DROP TABLE IF EXISTS+ TABLE_11);
        db.execSQL(DROP TABLE IF EXISTS+ TABLE_12);
        的onCreate(DB);
    }

    私人布尔checkDataBase(){
        SQLiteDatabase CHECKDB = NULL;
        尝试 {
            CHECKDB = SQLiteDatabase.openDatabase(DB_PATH + DATABASE_NAME,空,SQLiteDatabase.OPEN_READONLY);
            checkDB.close();
        }赶上(SQLiteException E){

        }
        返回CHECKDB!= NULL?真假;
    }
}
 

解决方案

现在的问题是,你的数据库可能不包括安卓相关的元数据。

您需要使用 SQLiteDatabase.NO_LOCALIZED_COLLATORS 标志调用 SQLiteDatabase.openDatabase()时 - 这不再的原因问题。至少它为我工作。

I'm trying to create a database with 12 different tables which has been working fine until today. Now every time I start my app for the first time after uninstalling it and re-installing it (or just clear app data) I get the error message seen in the title. However, the second time I start the app after getting this error it works fine. The code bellow is from my DatabaseHelper class which is more or less the same as the android notepad tutorial.

This error comes after the database has been opened in my activity and I try to make my first query.

Any suggestions of what could cause this and how to solve it?

private static class DatabaseHelper extends SQLiteOpenHelper {

    private static String DB_PATH = "/data/data/my_app/databases/";

    DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        if (!checkDataBase()) {
            db.execSQL(TABLE_1);
            db.execSQL(TABLE_2);
            db.execSQL(TABLE_3);

            db.execSQL(TABLE_4);
            db.execSQL(TABLE_5);
            db.execSQL(TABLE_6);

            db.execSQL(TABLE_7);
            db.execSQL(TABLE_8);
            db.execSQL(TABLE_9);

            db.execSQL(TABLE_10);
            db.execSQL(TABLE_11);
            db.execSQL(TABLE_12);
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_1);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_2);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_3);

        db.execSQL("DROP TABLE IF EXISTS " + TABLE_4);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_5);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_6);

        db.execSQL("DROP TABLE IF EXISTS " + TABLE_7);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_8);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_9);

        db.execSQL("DROP TABLE IF EXISTS " + TABLE_10);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_11);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_12);
        onCreate(db);
    }

    private boolean checkDataBase() {
        SQLiteDatabase checkDB = null;
        try {
            checkDB = SQLiteDatabase.openDatabase(DB_PATH + DATABASE_NAME, null, SQLiteDatabase.OPEN_READONLY);
            checkDB.close();
        } catch (SQLiteException e) {

        }
        return checkDB != null ? true : false;
    }
}

解决方案

The problem is that your database probably doesn't include Android-related metadata.

You need to use the SQLiteDatabase.NO_LOCALIZED_COLLATORS flag when calling SQLiteDatabase.openDatabase() - this no longer causes the problem. At least it worked for me.

这篇关于安卓:未能setlocale()的施工时,关闭数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆