Google, database işlemleri için Android SDK üzerinde çok kullanışlı bir kütüphane hazırlamış. Bu kütüphane ile varsayılan olarak SQLite database desteği geliyor. Bu oldukça hafif ve hızlı bir database motoru olduğundan mobil cihazlarda kullanıma uygundur.

Tümünü bir seferde anlatmak karışık ve uzun bir yazı oluşturacağından bu konuyu bir yazı dizisi haline getirmeye karar verdim. Bu yazımda bir database oluşturma konusunu ele alacağım.

Başlamadan önce Android uygulamalarda desteklenen database SQLite 3 olduğu bilgisini vermek istiyorum. Bu database ile ilgili dökümantasyona buradan ulaşabilirsiniz.

Bu yazı dizisinde SQL ile ilgili bilgi verilmeyecektir. Okuyucunun SQL ile ilgili temel bilgiye sahip olduğu düşünülerek yazılmıştır. Eğer SQL ile ilgili temel işlemler dediğimiz CREATE, DROP, SELECT, INSERT, UPDATE ve DELETE sorgularında yeterli bilgiye sahip değilseniz anlatılan bazı konularda zorlanabilirsiniz.

Android SDK ile database kullanımı için öncelikle SQLiteOpenHelper sınıfını extend eden bir sınıf oluşturmamız gerekiyor. Bu yeni sınıfımızın yapıcısında mutlaka üst sınıfın yapıcı metodunu çağırmamız gerekiyor. Bu sırada database ismi ve versiyonunu vermemiz gerekecek.

package com.example.android_database_tutorial;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class TasksDatabaseHelper extends SQLiteOpenHelper {
  private static final int DatabaseVersion = 1;
  private static final String DatabaseName = "Tasks.db";

  public TasksDatabaseHelper(Context context) {
    super(context, DatabaseName, null, DatabaseVersion);
  }

  @Override
  public void onCreate(SQLiteDatabase db) {
  }

  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  }
}

Override etmemiz gereken 2 metod olacak. Bunlar onCreate ve onUpgrade metodları. Eğer belirttiğimiz isimde bir database daha önce oluşturulmamış ise bu database’in şema yapısını eklememiz gerekecektir. Bu işlemi onCreate metodunda gerçekleştiriyoruz.

@Override
public void onCreate(SQLiteDatabase db) {
  try {
    db.beginTransaction();

    // burada tablolar oluşturulur.
    db.execSQL("CREATE TABLE Task (id INTEGER PRIMARY KEY AUTOINCREMENT, text TEXT NOT NULL, completed BOOLEAN DEFAULT 0);");

    db.setTransactionSuccessful();
  } finally {
    db.endTransaction();
  }
}

Bazı durumlarda database yapısında değişiklik yapmamız gerekir ve database versiyonunu yükseltiriz. Uygulama güncelleme sonrasında database’e ilk erişimde daha önce yaratılmış bir database varsa ancak versiyonu bizim elimizdekinden düşük ise onUpgrade metodu çalıştırılır.

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  try {
    db.beginTransaction();

    // Burada update işlemleri yapılır.
    db.execSQL("DROP TABLE IF EXISTS Task;");
    db.execSQL("CREATE TABLE Task (id INTEGER PRIMARY KEY AUTOINCREMENT, text TEXT NOT NULL, completed BOOLEAN DEFAULT 0);");

    db.setTransactionSuccessful();
  } finally {
    db.endTransaction();
  }
}

Normalde database upgrade işlemi burada yaptığım silip baştan oluşturmadan daha farklı tasarlanır. Database’de veri kaybı istemeyiz. Bunun yerine her bir versiyon değişikliklerini alter ederiz ve database’i güncel yapıya uygun olacak şekilde yükseltiriz. Ancak bu örneği biraz daha basit tutmayı tercih ettim.

Sonraki yazımda bu hazırladığımız database içindeki tabloya nasıl veri ekleyeceğimizi açıklamaya çalışacağım.