Neden Android Room Kullanmalıyız?

Zeynep Türker
HardwareAndro
Published in
2 min readApr 14, 2023

Herkese Merhaba, bu yazımda sizlere Android Room ve SQLite arasındaki farklar hakkında bilgi vermeye çalışacağım. Umarım faydalı olur .

Android uygulamalarında verilerin lokal olarak tutulmasını sağlayan veritabanlarından bahsedince akla SQLite gelir. Ancak SQLite’ı saf halde kullanmanın getirdiği zorlukları aşıp bizim için daha kolay ve anlaşılabilir hale getiren Jetpack Room kütüphanesi bizlere sunuldu. Bu yüzden artık Room veritabanını kullanmakta büyük bir fayda var.

Room Kütüphanesi Nedir?

Android Room, Google tarafından 2017 yılında bizlere tanıtılan bir kütüphanedir. SQLite işlemlerini kolaylaştırabilmek ve sadeleştirebilmek için tasarlanmıştır.

Şimdi gelelim Room’un SQLite veritabanına göre avantajlarına:

  1. SQLite, verileri ContentValues sınıfının nesnesi ile tutarken, Room veritabanı verilerini obje ile tutar. Bu bize kodu yazarken ve okurken daha büyük kolaylık sağlar.
// SQLite kullanarak veri ekleme
val contentValues = ContentValues()
contentValues.put("name", "Zeynep")
contentValues.put("surname", "Türker")
contentValues.put("age", 25)
database.insert("users", null, contentValues)

// Room kullanarak veri ekleme
val user = User()
user.name = "Zeynep"
user.surname = "Türker"
user.age = 25
userDao.insert(user)

2. Room veritabanı ile sorgular derleme zamanında kontrol edilir ve hatalar kontrol edilir. Bu sayede hatalarımızı runtime zamanında görmeyiz. Bu hata ayıklama sürecimizi hızlandırır ve kod güvenliğini artırır.

// SQLite kullanarak sorgu yazma
val sql = "SELECT * FROM users WHERE age > $age"
val cursor = database.rawQuery(sql, null)
while (cursor.moveToNext()) {
val name = cursor.getString(cursor.getColumnIndex("name"))
val surname = cursor.getString(cursor.getColumnIndex("surname"))
val age = cursor.getInt(cursor.getColumnIndex("age"))
// Verileri kullanmak için burada işlemler yapılabilir
}
cursor.close()

// Room kullanarak sorgu yazma
@Query("SELECT * FROM users WHERE age > :age")
fun getUsersOlderThan(age: Int): List<User>

SQLite ile sorgu yazarken SQL sorgusu yazılır ve veriler filtrelenir. Gelen veriler Cursor nesnesi ile alınır ve veriler, sütun isimlerine göre eşleştirilir. Room veritabanı kullandığımızda ise Query anotasyonu ile sorgumuzu belirtiriz ve sonrasında veriler filtrelenir. getUsersOlderThan methodu DAO sınıfı tarafından çağrılarak gelen veriler alınır. Bu sayede daha okunaklı ve basit kodlar yazabiliyoruz.

3. Veritabanı sürüm ve güncelleştirmeleri Room veritabanı ile daha kolay bir şekilde yönetilir. Bu sayede uygulamaların veritabanında yapılan değişiklikler basit bir şekilde yönetilir.

// SQLite kullanarak veritabanı güncelleme
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
db?.execSQL("DROP TABLE IF EXISTS users")
onCreate(db)
}

// Room kullanarak veritabanı güncelleme
@Database(entities = [User::class], version = 2)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}

SQLite kullanırken veritabanı güncelleme işlemi ‘onUpgrade’ methodu ile yapılırken Room veritabanında bu işlem ‘@Database ‘ notasyonu içinde belirlenen sürüm numarasına göre otomatik olarak yapılır. Bu sayede manuel olarak sürüm kontrolü yapmak zorunda kalmayız.

4. Room veritabanı, verilerin ekleme, güncelleme, silme ve sorgulama işlemlerini kolayca yapılmasına olanak tanır. Bu sayede veritabanı işlemleri daha az kod yazarak gerçekleştirilir.

// SQLite kullanarak veri silme
sql = "DELETE FROM users WHERE id = ?"
database.execSQL(sql, "2")

// Room kullanarak veri silme
@DELETE
fun deleteUser(user: User)

Room veritabanı sayesinde kodlarımızı daha kısa ,kolay ve güvenli şekilde yazabiliyoruz.

Android Room’u kullanarak basit bir not defteri uygulaması yazdım. Buradan ulaşabilirsiniz.

--

--