SQLite onUpgrade ()

У меня проблема в базе данных SQLite в android.

В моем методе onCreate (SQLiteDatabase db) класса SQLiteOpenHelper я создаю таблицы. Теперь у меня это приложение загружено в магазин. Теперь я понял, что мне нужно еще один coloumn в этих таблицах.

Если я поставлю обновление приложения в playstore (с новыми запросами в методе onCreate ()), в следующий раз будет вызываться метод OnUpgrade () и, следовательно, таблица не будет создана снова.

Поэтому, пожалуйста, скажите, есть ли способ удалить базу данных SQLite при повторной установке или обновлении приложения или удалить все приложение перед повторной установкой?

1. О onCreate () и onUpdate ()

OnCreate (..) вызывается всякий раз, когда приложение только что установлено. OnUpgrade вызывается всякий раз, когда приложение обновляется и запускается, а версия базы данных – не то же самое.

Вам нужен конструктор типа:

2. Увеличение версии db

MyOpenHelper(Context context) { super(context, "dbname", null, 2); } 

ВАЖНО: для того, чтобы вызывать onUpgrade, недостаточно увеличить версию приложения недостаточно.

3. Не забывайте новых пользователей!

Не забудьте добавить

 database.execSQL(DATABASE_CREATE_color); 

К вашему методу onCreate (), а также к недавно установленным приложениям не будет таблицы.

4. Как бороться с несколькими изменениями базы данных с течением времени

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

 onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { switch(oldVersion) { case 1: db.execSQL(DATABASE_CREATE_color); // we want both updates, so no break statement here... case 2: db.execSQL(DATABASE_CREATE_someothertable); } } 

Таким образом, когда пользователь обновляется с версии 1 до версии 3, они получают оба обновления. Когда пользователь обновляется с версии 2 до 3, они просто получают обновление версии 3 … В конце концов, вы не можете рассчитывать на 100% своей базы пользователей для обновления при каждом выпуске обновления. Иногда они пропускают обновление или 12 🙂

Надеюсь, это имеет смысл.

5. Ведение номеров ревизий под контролем при разработке

И, наконец …

 adb uninstall <yourpackagename> 

Полностью удаляет приложение. Когда вы снова устанавливаете, вам гарантированно удастся использовать метод onCreate, который не позволит вам увеличивать число версий базы данных в стратосфере …

По моему мнению, вам нужно добавить только один столбец.
Вы можете попробовать

 Alter table 

Ref- http://www.sqlite.org/lang_altertable.html

OnCreate (SQLiteDatabase db) вызывается только при создании базы данных в первый раз. Если вы хотите обработать обновление до существующей таблицы, вы должны использовать onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion) . Конкретно обрабатывать пути миграции от oldVersion до newVersion

Это может быть не лучшее решение, но я построил свой код, чтобы сравнить схемы таблиц, выбрав столбцы, которые я ищу.

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