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
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:
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.
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 veonCreate()
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.
Visual Studio her zaman Windows 8 Yöne...
Doğru Görev kullanın.Sadece uyumsuz-be...
Ne zaman uyumsuz bir Görev<T> yö...
Nasıl her zaman arka planda bir hizmet...
dyld: Sembol bulunamadı: çalıştırmak i...