Android Studio SQLite onUpgrade - PullRequest
       0

Android Studio SQLite onUpgrade

1 голос
/ 26 сентября 2019

Привет, я сейчас работаю над приложением для словаря языков.База данных из базы данных SQLite, которую я ввожу вручную.Особенность приложения в том, что пользователи могут задавать любые слова, которых нет в списке, который нужно добавить, поэтому мне приходится обновлять базу данных вручную каждый раз, когда обновляется приложение.

Проблема в том, что каждый раз, когда я изменяю данные БД,список не обновляется, когда я изменяю номер версии, приложение зависало.

Как я могу решить эту проблему?Учебники там только показывают, как это сделать на вводе в реальном времени или добавлении столбцов, в то время как основной только для добавления строк и на уже существующих БД.Спасибо.

Вот мой класс DataBaseHelper

public class DataBaseHelper extends SQLiteAssetHelper {

    private static final String DB_Name = "kamus_db";
    private static final int DB_VER = 1;

    private static final String TB_DATA = "tb_data";
    private static final String COL_ID = "_id";
    private static final String COL_TURKI = "turki";
    private static final String COL_ISTILAH ="istilah";
    private static final String COL_INDONESIA = "indonesia";

    private static DataBaseHelper dbInstance;
    private static SQLiteDatabase db;

    private  DataBaseHelper(Context ctx) {
        super(ctx, DB_Name, null, DB_VER);
    }

    static DataBaseHelper getInstance(Context ctx) {
        if (dbInstance == null) {
            dbInstance = new DataBaseHelper(ctx);
            db = dbInstance.getWritableDatabase();
        } return dbInstance;
    }

    @Override
    public synchronized void close() {
        super.close();
        if (dbInstance != null) {
            dbInstance.close();
        }
    }

    List<Kamus> getAllKamus() {
        List<Kamus> kamusList = new ArrayList<>();

        Cursor cursor = db.query(TB_DATA, new String[] {
                COL_ID, COL_TURKI, COL_ISTILAH, COL_INDONESIA
        }, null, null, null, null, null);

        if (cursor.getCount() >= 1 ) {
            cursor.moveToFirst();

            do {
                Kamus kamus = new Kamus();
                kamus.setTurki(cursor.getString(cursor.getColumnIndexOrThrow(COL_TURKI)));
                kamus.setIstilah(cursor.getString(cursor.getColumnIndexOrThrow(COL_ISTILAH)));
                kamus.setIndonesia(cursor.getString(cursor.getColumnIndexOrThrow(COL_INDONESIA)));
                kamusList.add(kamus);
            } while (cursor.moveToNext());
        } return kamusList;
    }

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

        String TAG = "TAG";

        Log.w(TAG, "Upgrading database. Existing contents will be lost. ["
            + oldVersion + "] -> [" + newVersion + "]");

        db.execSQL("DROP TABLE " + TB_DATA);
        onCreate(db);

    }

}

1 Ответ

0 голосов
/ 26 сентября 2019

Поскольку вы используете SQLiteAssetHelper , вам следует обратиться к ReadMe - Обновления базы данных .

Возможно, вы захотите взглянуть на Обновления через раздел перезаписи и вызвать метод setForcedUpgrade () (, если пользователи не обновляютсябаза данных ), это заменит базу данных на обновленную базу данных.

Если пользователи обновляют базу данных, то что нужно сделать, зависит от того, какие изменения были внесены.Вы, вероятно, должны написать код, который будет сохранять данные, если это будет необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...