

Arkadaşlar SQLiteOpenHelper sınıfının constructor'ındaki version'nun anlamı ne?
soruldu: 27 Şub '15, 02:52
altan_518


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.
cevaplandı: 27 Şub '15, 10:23
Tugrul Asik