Daha önce yarattığımız ve içine kayıt eklediğimiz database’den bu sefer sorgu yapmayı anlatmaya çalışacağım.

Android SDK ile gelen sorgu (query) hazırlama API’si sayesinde kolaylıkla database tablolarında sorgular gerçekleştirebiliyoruz. Aşağıda daha önceki gibi helperdan yarattığımız objemizi kullanarak bir sorgu gerçekleştireceğiz.

// Çekeceğimiz kayıtları sınırlandırmak için kullandığımız where içinde verdiğimiz parametrelerin değerlerini bu şekilde sağlıyoruz.
String[] whereArgs = new String[1];
whereArgs[0] = String.valueOf(0);

TasksDatabaseHelper dbHelper = null;
SQLiteDatabase db = null;
Cursor cursor = null;

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

  // Kayıt çekmek için query overload methodunun sizin için uygun olanını kullanabilirsiniz.
  // İlk parametere tablo ismi.
  // İkinci parametre çekilecek sütunlar. null verilmesi halinde tüm sütunlar çekilir.
  // Üçüncü parametre where koşulları
  // Dördüncü parametre where koşullarında verilen paramertelerin değerleri.
  // Beşinci parametre SQL groupBy
  // Altıncı parametre SQL having
  // Son paramerte ise SQL orderBy
  // Burada yazdığımız "SELECT * FROM Task WHERE completed == ?;" SQL sözcüğüne denktir.
  // Geriye bir cursor objesi döner. Bunu kullanarak sonuç içinde gezebiliriz.
  cursor = db.query("Task", null, "completed == ?", whereArgs, null, null, null);

  // Sonuçlar içinde ilk satıra gidiyoruz.
  cursor.moveToFirst();

  // Eğer bu son satırdan sonraysa elimize hiç sonuç dönmemiş demektir
  if (cursor.isAfterLast()) {
    // Burada sonuç alamadığımız sorgu ile ilgili gerekli işlemler yapılır.
    return;
  }

  final int idColumnIndex = cursor.getColumnIndex("id");
  final int textColumnIndex = cursor.getColumnIndex("text");
  final int completedColumnIndex = cursor.getColumnIndex("completed");

  final ArrayList activeTasks = new ArrayList(cursor.getCount());
  do {
    // Sonuçlar içinde aşağıdaki gibi geziyoruz. Sonuçlarla istediğimiz herhangi bir işi burada gerçekleştiriyoruz.
    Task task = new Task(
        cursor.getLong(idColumnIndex),
        cursor.getString(textColumnIndex),
        cursor.getInt(completedColumnIndex) == 1);

    activeTasks.add(task);
  } while (cursor.moveToNext());

  if (activeTasks.size() > 0) {
    // Some work...
  }
} finally {
  // Çektiğimiz data ile işimiz bittiğinde mutlaka cursor objesini kapatmalıyız.
  if (null != cursor) {
    cursor.close();
  }

  // Yazma işi bittiğinde mutlaka database bağlantısını kapatmalıyız.
  if (null != db) {
    db.close();
  }

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

Yukarıda kullanılan Task sınıfı.

public class Task {
  private long id;
  private String text;
  private boolean completed;

  Task(long id, String text, boolean completed) {
    setId(id);
    setText(text);
    setCompleted(completed);
  }

  public long getId() {
    return id;
  }

  private void setId(long id) {
    this.id = id;
  }

  public String getText() {
    return text;
  }

  private void setText(String text) {
    this.text = text;
  }

  public boolean isCompleted() {
    return completed;
  }

  private void setCompleted(boolean completed) {
    this.completed = completed;
  }
}

Bu şekilde bir tabloda sorgu yapıyoruz. Farklı overload fonksiyonlar da var. Bunlar içinden size uygun olanı kullanabilirsiniz. Ben en çok kullanılanı açıklamaya çalıştım. Sorgu sonrasında cursor objesinin close methodunu çalıştırmak önemli. Bu şekilde kullanılan kaynaklar serbest bırakılıyor. Başka bir yazıda görüşmek üzere..