Обновление версии базы данных автоматически

Привет, я создаю приложение, которое хранит пароль пользователя, входящего. и всякий раз, когда ему нужно изменить свой пароль, данные должны быть изменены. Проблема, с которой я сталкиваюсь, заключается в том, что, когда я вызываю класс DBHelper (я создан для того, чтобы выполнять всю работу с моей базой данных), она не удаляет таблицу, если она доступна.

Будет более полезно, если кто-нибудь скажет мне, как удалить записи в таблице при вызове класса DBHelper.

Я понял, что функции OnCreate и OnUpgrade не выполняются, кроме как в первый раз при создании базы данных.

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

public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
          db.execSQL("DROP TABLE IF EXISTS '" + DATABASE_TABLE+"'");
          db.execSQL("CREATE TABLE " + DATABASE_TABLE +" (" +
                KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, "+
                KEY_ID +" INTEGER, "+
                KEY_X +" INTEGER,  "+
                KEY_Y +" INTEGER);"
                );  

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        db.execSQL("DROP TABLE IF EXISTS '" + DATABASE_TABLE+"'");
        onCreate(db);
    }

public long createEntry(int name, int sx, int sy) {
        // TODO Auto-generated method stub
        ContentValues cv=new ContentValues();
        cv.put(KEY_ID, name);
        cv.put(KEY_X, sx);
        cv.put(KEY_Y, sy);
        return ourDatabase.insert(DATABASE_TABLE, null, cv);
    }

2 ответа

Решение

Изменение строки в базе данных не должно влиять на версию схемы. Это должно быть выполнено как правильные запросы для манипулирования записями базы данных.

Вы можете найти использование этого метода:

public void clearDatabase(Context context) {
   DatabaseHelper helper = new DBHelper(context);
   SQLiteDatabase database = helper.getWritableDatabase();
   database.delete(DATABASE_TABLE, null, null); //erases everything in the table.
   database.close();
}

Прежде всего, вот как вы можете программно изменить версию базы данных и, следовательно, заставить SQLiteOpenHelper звонить onUpgrade() на следующий звонок, чтобы открыть базу данных:

db.execSQL("PRAGMA user_version = " + NEW_VERSION);

Во-вторых, я не рекомендую использовать эту технику. Я только написал этот ответ, потому что вы спросили о том, как сделать это таким образом. Это твой выбор. Я сделаю это так, как рекомендует @Boris Strandjev в своем ответе.

Другие вопросы по тегам