在android studio中升级数据库无法正常工作

时间:2019-06-06 20:41:43

标签: android sqlite android-sqlite

我正在尝试将sqlite版本号从1升级到2,但是没有调用onupgrade方法。

我是否必须删除设备中的应用程序,然后安装该应用程序进行测试?

只有被调用的方法是DatabaseHelperonCreate 没有其他方法可以调用。

在DatabaseHelper.java文件中

    private static final int DBVersion = 1; // I had change this value to 2.but it is not working.
    public DatabaseHelper(Context context, CursorFactory cf) {
        super(context, DBName, cf, DBVersion);
    }

 @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(TABLE_CREATE_Table);
}
@Override
    public void onOpen(SQLiteDatabase db) {
        super.onOpen(db);
} 
@Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int currentVersion) {
//This is not called.If it called i will add the changed here
}

dataprovider.java的另一个类

@Override
    public boolean onCreate() {
        dbHelper = new DatabaseHelper(getContext(), null);
        return true;
    }

1 个答案:

答案 0 :(得分:1)

使用:-

@Override
public boolean onCreate() {
    dbHelper = new DatabaseHelper(getContext(), null);
    SqliteDatabase db = dbHelper.getWritableDatabase(); //<<<<<<<<<<< 
    return true;
}

尝试打开数据库,因此将调用 onCreate / onUpgrade 。 -仅在数据库不存在时 onCreate 。 - onUpgrade (仅当数据库存在并且指定的版本号大于存储在数据库中的数据库版本时)。

也就是说,当实例化数据库助手(SQLiteOpenHelper的子类)时,不会尝试打开数据库。

仅当调用SQLiteDatabase的 getWritableDatabase (或 getReadableDatabase )时才尝试打开数据库。两者都尝试打开数据库。注意getWritableDatabase或getReadableDatabase可能会隐式调用。

  • 请注意,以上内容不直接包含使用SQliteDatabase的OPEN方法。

替代修补程序

我个人倾向于在使用:-

构建数据库助手时强行打开
public DatabaseHelper(Context context, CursorFactory cf) {
    super(context, DBName, cf, DBVersion);
    this.getWritableDatabase();
}
  • 我倾向于将返回的SQLiteDatabase保存到一个类变量中,然后使用该变量,而不是在基础方法中使用this.getWritableDatabase()
相关问题