SQLite
 sql >> база данни >  >> RDS >> SQLite

Кога се изпълнява SQLiteOpenHelper onCreate() / onUpgrade()?

SQLiteOpenHelper onCreate() и onUpgrade() обратните извиквания се извикват, когато базата данни е действително отворена, например чрез извикване на getWritableDatabase() . Базата данни не се отваря, когато самият обект за помощ на базата данни е създаден.

SQLiteOpenHelper версии на файловете на базата данни. Номерът на версията е int аргумент, предаван на конструктора. Във файла на базата данни номерът на версията се съхранява в PRAGMA user_version .

onCreate() се изпълнява само когато файлът на базата данни не съществува и току-що е създаден. Ако onCreate() се връща успешно (не хвърля изключение), се приема, че базата данни е създадена с искания номер на версията. Като следствие, не трябва да хващате SQLException s в onCreate() себе си.

onUpgrade() се извиква само когато файлът на базата данни съществува, но номерът на съхранената версия е по-нисък от поискания в конструктора. onUpgrade() трябва да актуализира схемата на таблицата до исканата версия.

При промяна на схемата на таблицата в кода (onCreate() ), трябва да се уверите, че базата данни е актуализирана. Два основни подхода:

  1. Изтрийте стария файл на базата данни, така че onCreate() се стартира отново. Това често се предпочита по време на разработка, когато имате контрол върху инсталираните версии и загубата на данни не е проблем. Някои начини за изтриване на файла на базата данни:

    • Деинсталирайте приложението. Използвайте мениджъра на приложения или adb uninstall your.package.name от черупката.

    • Изчистете данните на приложението. Използвайте мениджъра на приложения.

  2. Увеличете версията на базата данни, така че onUpgrade() се извиква. Това е малко по-сложно, тъй като е необходим повече код.

    • За надстройки на схемата за време за разработка, при които загубата на данни не е проблем, можете просто да използвате execSQL("DROP TABLE IF EXISTS <tablename>") в, за да премахнете съществуващите си таблици и да извикате onCreate() за да пресъздадете базата данни.

    • За пуснатите версии трябва да приложите миграция на данни в onUpgrade() така че потребителите ви да не загубят данните си.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Включете имена на колони в резултатите от заявката на SQLite

  2. Изключение на нулев указател при извикване на getReadableDatabase()

  3. Как работи Typeof() в SQLite

  4. Получаване на NoClassDefFoundError, докато се опитвате да използвате Proguard и SQLcipher в Android

  5. Как да дам на нулевата позиция на spinner бърза стойност?