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

Привет, я создаю приложение, в котором хранится пароль входящего пользователя. и всякий раз, когда ему нужно изменить свой пароль, данные должны быть изменены. Проблема, с которой я сталкиваюсь, заключается в том, что когда я вызываю класс 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);
    }

person sam    schedule 07.04.2013    source источник
comment
Простое увеличение версии базы данных должно помочь. (знай, что поздно).   -  person Muhammad Babar    schedule 06.02.2015


Ответы (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();
}
person Boris Strandjev    schedule 07.04.2013
comment
Это не отвечает на вопрос, почему onUpgrade не выполняется. - person Brill Pappin; 19.02.2015

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

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

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

person kdehairy    schedule 08.04.2013