SORU
19 ŞUBAT 2014, ÇARŞAMBA


Ne zaman SQLiteOpenHelper onCreate() / onUpgrade() çalıştırmak?

2* ** *3 ama benim alma benim tablo yaratıyorum

SQLiteException: no such table

ya

SQLiteException: no such column

hatalar. Neden?

(Bu ve buna benzer sorular her hafta onlarca amalgamated özetidir. Bir "" wiki soru/sorular iyi bir referans olmalıdır, böylece burada cevap.) topluluk kurallı sağlamak için çalışıyor

CEVAP
19 ŞUBAT 2014, ÇARŞAMBA


26* onCreate() *ve onUpgrade() geri veritabanı aslında getWritableDatabase() çağrısıyla örneğin açıldığında çağrılır. Veritabanı veritabanı Yardımcısı oluşturulur nesne açık değil.

SQLiteOpenHelper veritabanı dosyaları sürümleri. Sürüm numarası int bağımsız constructor geçirilir. Veritabanı dosyası, sürüm numarası PRAGMA user_version saklanır.

onCreate() tek bir veritabanı dosyası yok iken çalıştırılır ve sadece oluşturuldu. Eğer onCreate() başarıyla (istisna yok) dönerse, veritabanı istenen sürüm numarası ile oluşturulan olduğu varsayılır. Bir ima olarak, onCreate()15 *s kendini yakalamak gerekir.

onUpgrade() sadece veritabanı dosyası var ama saklı sürüm numarası kurucu istenen daha düşük olduğunda denir. onUpgrade() tablo istenen şema sürümü için güncelleme gerekir.

Kod içinde tablo, şema (onCreate()) değiştirirken, veritabanı güncel olduğundan emin olun. İki ana yaklaşım:

  1. onCreate() tekrar çalıştırmak için eski veritabanı dosyasını silin. Bu sık sık yüklenmiş sürümleri üzerinden kontrol ve veri kaybı bir sorunu olmayan kalkınma zamanda tercih edilir. Bazı yollar veritabanı dosyasını silmek için:

    • Uygulamayı kaldırın. Kabuğundan uygulama yöneticisi ya da adb uninstall your.package.name kullanın.

    • Uygulama verilerini temizleyin. Uygulama Yöneticisini kullanın.

  2. onUpgrade() çağrılır, böylece Veritabanı Sürümü artırmak. Bu kodu daha fazla ihtiyaç olduğu için, biraz daha karmaşıktır.

    • Geliştirme zamanı veri kaybına bir sorunu olmayan şema yükseltmeleri için, sadece execSQL("DROP TABLE IF EXISTS <tablename>") varolan tabloları Kaldır ve onCreate() veritabanı yeniden çağırmak için kullanabilirsiniz.

    • Yayınlanan sürümleri için, kullanıcıların kendi veri kaybetmek yok bu yüzden onUpgrade() veri geçiş uygulamak gerekir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • andony5589

    andony5589

    7 Aralık 2011
  • CMTelly

    CMTelly

    2 Mayıs 2007
  • Within Temptation

    Within Tempt

    18 EYLÜL 2006