обновление базы данных в андроид студии не работает - PullRequest
1 голос
/ 06 июня 2019

Я пытаюсь обновить номер версии sqlite с 1 до 2, но метод onupgrade не вызывается.

нужно ли удалять приложение на устройстве, а затем устанавливать приложение для его проверки?

Единственный вызываемый метод - DatabaseHelper и onCreate Никакой другой метод не вызывается.

В файле 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 Ответ

1 голос
/ 06 июня 2019

с помощью: -

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

пытается открыть базу данных и, таким образом, будет вызвано onCreate / onUpgrade .- onCreate только если база данных не существует.- onUpgrade только если база данных существует И указанный номер версии больше, чем версия базы данных, хранящаяся в базе данных.

То есть при создании экземпляра Помощника по базам данных (подкласс SQLiteOpenHelper) никакой попытки не происходитсделал, чтобы открыть базу данных.

Попытка открыть базу данных осуществляется только при вызове getWritableDatabase (или getReadableDatabase ) SQLiteDatabase.Оба пытаются открыть базу данных.Отмечая, что getWritableDatabase или getReadableDatabase вполне могут быть вызваны неявно.

  • Обратите внимание, что вышеупомянутое не включает непосредственное использование методов OPEN SQliteDatabase.

Альтернативное исправление

Я лично склоняюсь к открытию при создании помощника базы данных, используя: -

public DatabaseHelper(Context context, CursorFactory cf) {
    super(context, DBName, cf, DBVersion);
    this.getWritableDatabase();
}
  • Я склонен сохранять возвращенную базу данных SQLiteDatabase в переменную класса и затем использовать ее вместо использования this.getWritableDatabase() восновные методы.
...