Soru & Cevap

Android Eski db deb yeni db ye tablo aktarma

31.12.2017 - 01:50

Soruyu örnek vererek anlatmak istiyorum.

Uygulama içerisinde kullandığım A.db isminde bir veritabanı var. Bu veri tabanının içinde 2 tablo var. 1.Kullanıcı verileri,2.Uygulama içinde kullanılan makaleler var.

Uygulamanın yeni sürümünde B.db isimli veri tabanını kullanıcam. Bu veri tabanında da aynı aynı tablolar var.Aralarındaki tek far yeni db ye eklenmiş olan binlerce yeni makale var. DataBaseHandler sınıfı ile B.db isimli sqlite dosyasını assets klasörü içinden telefona kopyaladıktan sonra eski db olan A.db den kullanıcı verileri isimli tablonun içindeki tüm verileri yeni veritabanının içine kopyalamak istiyorum. Bunu nasıl yapabilirim.

Versiyon yükselterek onUpgrade fonksiyonunu neden kullanmıyorsun demeyin. 2. tablo içine yani Uygulama içinde kullanılan makalelerin bulunduğu tabloya eklenmesi gereken binlerce satır yeni kayıt(makale) var. Bunu sorgu ile gerçekleştirmem imkansız.

Her güncellemede bu sorunla karşı karşıya geliyorum. Bazı basit kullanıcı verilerini SharedPreferences ile kayıt altına alabiliyorum fakat diğer tüm bilgileri(favori kayıtlar veya kisisel notlar gibi) kayıtlar için bir şey yapamıyorum.

Bu veri kaybının önüne geçebilmem için ne yapmam lazım? 

9 Görüntülenme

1 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user f.erenyucal
f.erenyucal
18.02.2023 - 06:12

Merhaba Rabia , Veri tabanı güncellemelerinde veri kaybını önlemek için genellikle iki yöntem kullanılır: veri tabanı yedekleme ve veri tabanı dönüşümü

Veri tabanı yedekleme yöntemi, mevcut veri tabanının yedeklenmesini ve yeni veri tabanının oluşturulmasını içerir. Bu yöntemde, mevcut veri tabanından kullanıcı verileri isimli tablonun içindeki tüm veriler yedeklenir ve yeni veri tabanına aktarılır. Ancak, bu yöntemde, Uygulama içinde kullanılan makaleler tablosuna eklenen binlerce satır yeni kayıt elle kopyalanması gerekebilir. Bu yöntem, verilerin kaybolmasını önlemek için bir seçenek olarak kullanılabilir

Veri tabanı dönüşümü yöntemi ise, mevcut veri tabanının yapılandırmasının değiştirilerek yeni veri tabanına uyumlu hale getirilmesini içerir. Bu yöntemde, A.db den kullanıcı verileri isimli tablonun içindeki tüm veriler yeni veri tabanına aktarılır ve daha sonra Uygulama içinde kullanılan makaleler tablosu yeni bir yapılandırmaya dönüştürülür. Bu yöntem, verilerin kaybolmasını önlemek için daha iyi bir seçenek olabilir

Örneğin, A.db den kullanıcı verileri isimli tablonun içindeki tüm verileri B.db veri tabanına aktarmak için şu adımları izleyebilirsiniz

  1. Yeni veri tabanı B.db oluşturulur
  2. A.db veri tabanından kullanıcı verileri isimli tablo seçilir ve tüm veriler bir diziye yüklenir
  3. Yeni veri tabanı B.db açılır ve kullanıcı verileri isimli tablo oluşturulur
  4. Dizi verileri yeni veri tabanındaki kullanıcı verileri tablosuna aktarılır

Aşağıdaki kod örneği, mevcut veri tabanından kullanıcı verileri isimli tablonun içindeki tüm verileri B.db veri tabanına aktarmak için kullanılabilir

 

// A.db veri tabanından verileri çekme
SQLiteDatabase oldDB = SQLiteDatabase.openDatabase(oldDBPath, null, SQLiteDatabase.OPEN_READONLY);
Cursor cursor = oldDB.rawQuery("SELECT * FROM kullanici_verileri", null);

// Yeni veri tabanına verileri aktarma
SQLiteDatabase newDB = getWritableDatabase();
newDB.execSQL("CREATE TABLE IF NOT EXISTS kullanici_verileri (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)");
while (cursor.moveToNext()) {
    int id = cursor.getInt(cursor.getColumnIndex("id"));
    String name = cursor.getString(cursor.getColumnIndex("name"));
    int age = cursor.getInt(cursor.getColumnIndex("age"));
    newDB.execSQL("INSERT INTO kullanici_verileri (id, name, age) VALUES (" + id + ", '" + name + "', " + age