SQLiteOpenHelper
onCreate()
и onUpgrade()
обратните извиквания се извикват, когато базата данни е действително отворена, например чрез извикване на getWritableDatabase()
. Базата данни не се отваря, когато самият обект за помощ на базата данни е създаден.
SQLiteOpenHelper
версии на файловете на базата данни. Номерът на версията е int
аргумент, предаван на конструктора. Във файла на базата данни номерът на версията се съхранява в PRAGMA user_version
.
onCreate()
се изпълнява само когато файлът на базата данни не съществува и току-що е създаден. Ако onCreate()
се връща успешно (не хвърля изключение), се приема, че базата данни е създадена с искания номер на версията. Като следствие, не трябва да хващате SQLException
s в onCreate()
себе си.
onUpgrade()
се извиква само когато файлът на базата данни съществува, но номерът на съхранената версия е по-нисък от поискания в конструктора. onUpgrade()
трябва да актуализира схемата на таблицата до исканата версия.
При промяна на схемата на таблицата в кода (onCreate()
), трябва да се уверите, че базата данни е актуализирана. Два основни подхода:
-
Изтрийте стария файл на базата данни, така че
onCreate()
се стартира отново. Това често се предпочита по време на разработка, когато имате контрол върху инсталираните версии и загубата на данни не е проблем. Някои начини за изтриване на файла на базата данни:-
Деинсталирайте приложението. Използвайте мениджъра на приложения или
adb uninstall your.package.name
от черупката. -
Изчистете данните на приложението. Използвайте мениджъра на приложения.
-
-
Увеличете версията на базата данни, така че
onUpgrade()
се извиква. Това е малко по-сложно, тъй като е необходим повече код.-
За надстройки на схемата за време за разработка, при които загубата на данни не е проблем, можете просто да използвате
execSQL("DROP TABLE IF EXISTS <tablename>")
в, за да премахнете съществуващите си таблици и да извикатеonCreate()
за да пресъздадете базата данни. -
За пуснатите версии трябва да приложите миграция на данни в
onUpgrade()
така че потребителите ви да не загубят данните си.
-