SQLiteOpenHelper
onCreate()
og onUpgrade()
tilbagekald påkaldes, når databasen faktisk åbnes, for eksempel ved et kald til getWritableDatabase()
. Databasen åbnes ikke, når selve databasehjælpeobjektet oprettes.
SQLiteOpenHelper
versioner af databasefilerne. Versionsnummeret er int
argumentet videregivet til konstruktøren. I databasefilen er versionsnummeret gemt i PRAGMA user_version
.
onCreate()
køres kun, når databasefilen ikke eksisterede og lige blev oprettet. Hvis onCreate()
returnerer med succes (udløser ikke en undtagelse), antages databasen at være oprettet med det anmodede versionsnummer. Som en implikation bør du ikke fange SQLException
s i onCreate()
dig selv.
onUpgrade()
kaldes kun, når databasefilen eksisterer, men det lagrede versionsnummer er lavere end anmodet i konstruktøren. onUpgrade()
bør opdatere tabelskemaet til den ønskede version.
Når du ændrer tabelskemaet i kode (onCreate()
), skal du sørge for, at databasen er opdateret. To hovedtilgange:
-
Slet den gamle databasefil, så
onCreate()
køres igen. Dette foretrækkes ofte på udviklingstidspunktet, hvor du har kontrol over de installerede versioner, og tab af data ikke er et problem. Nogle måder at slette databasefilen på:-
Afinstaller applikationen. Brug applikationsadministratoren eller
adb uninstall your.package.name
fra skallen. -
Ryd applikationsdata. Brug applikationsadministratoren.
-
-
Forøg databaseversionen, så
onUpgrade()
er påberåbt. Dette er lidt mere kompliceret, da der er brug for mere kode.-
Til udviklingstidsskemaopgraderinger, hvor datatab ikke er et problem, kan du bare bruge
execSQL("DROP TABLE IF EXISTS <tablename>")
ind for at fjerne dine eksisterende tabeller og kaldeonCreate()
for at genskabe databasen. -
For frigivne versioner bør du implementere datamigrering i
onUpgrade()
så dine brugere ikke mister deres data.
-