Arkadaşlar SQLiteOpenHelper sınıfının constructor'ındaki version'nun anlamı ne?

public SQLiteOpenHelper(Context context, String name, CursorFactory factory, int version) {
    this(context, name, factory, version);
}

soruldu: 27 Şub '15, 02:52

altan_518's gravatar image

altan_518
444127
cevap kabul oranı: 15%


4-5 yıl önce bu konularda çalışmaya başladığım dönemlerde ben de aynı soruyu kendi kendime sormuştum. Epeyce vaktimi alan kod deneyimlerinden sonra ne işe yaradığını geç olsa da anlamıştım. Gereksiz bir şey gibi gelmişti bana :)

Şöyle özetleyeyim; veritabanları sistemde versiyonlama yöntemiyle tutuluyor. Version bir nevi flag. Yenisi eskisi versiyona göre belirleniyor. Veritabanında, tablolarda kolon, tip vb. değişiklikler yaptığında eğer yeni bir versiyona geçmezsen, uygulamayı cihaza/emülatöre attığında veritabanı bulunamadı veya ilgili alan bulunamadı gibi hatalar alacaksın. (Çünkü eski versiyonda oluşturulan veritabanı hala orada ve senin kodunda değişiklik yaptığın veritabanının yeni alanlarıyla ilgili bilgiler var. Versiyon güncellemediğin için eski veritabanı kullanılacak ve senin kodundaki yeni alanlar sıkıntı çıkartacaktır.)

Version değiştirmeden nasıl ilerlerim ?

Uygulamayı daha önce cihaza yüklediysen ve veritabanında değişiklikler yaptıysan yeni veritabanı daha önceki versiyondan dolayı kendini yenilemeyecek ve senin yeni veritabanın uygulamada düzgün bir şekilde çalışmayacak. Bu da her değişiklikte uygulamayı cihazdan tüm verileri silerek kaldırman anlamına geliyor. Dolayısıyla bu işlem özellikle debug seviyede çalışırken çok can sıkıcı ve vakit alıcı. Aynı zamanda güncellemeler için de kilit bir bayrak(flag) durumunda.

Bu sebeple tablolarla ilgili yaptığın her işlemde o uygulama için version'u artırman gerekli.

Önemli Bilgi:

Versionlar cihaz bazında özeldir. Kendi cihazında geliştirme yapıp daha sonra veritabanında değişiklik yaparsan uygulamayı kendi cihazına tekrardan yüklediğinde eski veritabanının ve senin veritabanının versiyonu aynı olacağından, veritabanı güncellemesi olmayacak ve uygulama senin cihazında verimli bir şekilde çalışmayacaktır. Fakat daha önce hiç yüklemediğin bir arkadaşının cihazına atarsan şak diye çalışacaktır. Bu aynı zamanda Ahmette şıkır şıkır çalıştı bende neden çalışmadı, cihazımda sorun var mızmızlanmasının bilimsel açıklamalarından biridir :) Küçük detaylar; fakat önemli ! Bundan dolayıdır ki uygulamamayı komple sildim tekrar yükledim düzeldi tezi hemen hemen her zaman sorunları düzeltir. Suç android'te değil, detayları kaçıran uygulama geliştiricilerindedir :)

Saygılarımla. İyi çalışmalar.

permanent link

cevaplandı: 27 Şub '15, 10:23

Tugrul%20Asik's gravatar image

Tugrul Asik
1.3k716
cevap kabul oranı: 26%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×819
×39
×35

Soruldu: 27 Şub '15, 02:52

Görüntüleme: 525 kez

Son güncelleme: 27 Şub '15, 10:23

powered by BitNami OSQA