Daha önce Android SDK ile SQLite database üzerinde çalışmayı görmüştük. Şimdi SQL ile bize birçok ek olanak sağlayan transaction kullanımına değineceğiz.

Bildiğiniz gibi transaction bize database işlemlerinde birçok faydası olan bir araçtır. Transaction sayesinde yapılan bir dizi işlemi aynı anda kaydedebilir veya geri alabiliriz. Ayrıca transaction içinde yapılan işlemler çok daha hızlı gerçekleşir.

Bunu bir örnekle açıklamaya çalışacağım. Yorum satırlarında yapılanları açıklayacağım.

long startTime = System.currentTimeMillis();

TasksDatabaseHelper dbHelper = null;
SQLiteDatabase db = null;
try {
  // Helper objemizi oluşturuyoruz.
  dbHelper = new TasksDatabaseHelper(this);
  // Kayıt eklemek için kullanacağımızdan yazma destekli bir
  // database bağlantısı açıyoruz.
  db = dbHelper.getWritableDatabase();

  // Bir transaction başlatıyoruz.
  db.beginTransaction();

  // Transaction içinde yapmak istediğimiz işlemleri yapıyoruz.
  for (int i = 0; i < 10000; i++) {
    long id = db.insert("Task", null, insertValues);

    if (-1 == id) {
      Log.e("Task DB", "Record cannot be inserted. You should check your statements.");
    }
  }

  // Yaptığımız değişikliklerin database'e yazılmasını isteyip istemediğimizi burada beklirliyoruz.
  db.setTransactionSuccessful();
} catch (SQLiteException e) {
  Log.e("Task DB", "Error on inserting record.", e);
} finally {
  // Yazma işi bittiğinde mutlaka database bağlantısını
  // ve transaction'ı kapatmalıyız.
  if (null != db) {
    db.endTransaction();
    db.close();
  }

  // Helper ile açık kalan tüm bağlantıları kapatabiliriz.
  if (null != dbHelper) {
    dbHelper.close();
  }

  long endTime = System.currentTimeMillis();
  long elapsedTime = endTime - startTime;

  Log.d("DB", "ElapsedTime: " + elapsedTime);
}

Yukarıdaki transaction kullanarak 2616 ms süren 10000 satır ekleme işi, transaction kullanmadan 20031 ms zaman alacaktır.

Hepizine kolay gelsin.