Android'de yeni başlayanlar hangi veritabanını seçmeli: Kısa cevap ve eylem planı

Kerem Aydın·7 Temmuz 2026·⏱3 dk

Room'u seçin — uygulamaların %90'ı için daha basit, daha güvenli ve geliştirmesi daha hızlıdır; SQLite'ı yalnızca eğitim amaçlı denemeler veya çok hafif prototipler için saklayın. Aşağıda karşılaştırma, gerçek avantajlar/dezavantajlar ve Room ile 30–60 dakika içinde CRUD işlemlerini başlatmak için adım adım bir plan bulacaksınız.

Yerel bir veritabanına neden ihtiyaç vardır ve ne zaman SQLite/Room seçilmelidir

Verilerin uygulamalar kapatılıp açıldığında korunması gerekiyorsa yerel bir veritabanına ihtiyaç duyulur: notlar, ayarlar, önbellek, profiller. SQLite, sunucusuz yerleşik bir ilişkisel VTYS'dir; Room ise SQLite üzerinde çalışan modern bir Jetpack ORM katmanıdır; boilerplate kodu ortadan kaldırır ve type-safety (tür güvenliği) ile LiveData/Flow/Coroutines entegrasyonu sağlar.

Room, birçok SQL hatasını derleme zamanında yakalar ve LiveData/Flow aracılığıyla kullanıcı arayüzünü otomatik olarak günceller — hızlı ve kararlı prototipler için idealdir.

Kısa karşılaştırma (yeni başlayanlar için önemli olanlar)

KriterSQLite (manuel)Room (Jetpack)
Zorlukorta: SQLiteOpenHelper ve SQLdüşük: anotasyonlar ve oluşturulan kod
Type-safetyyokevet (derleme zamanında hatalar)
Eşzamanlılıkmanuelyerleşik (suspend, Flow, LiveData)
APK boyutuek 0+2–5 MB
Öneribir saatte hızlı prototipherhangi bir gerçek uygulama, ölçeklendirmesi daha kolay

Room ile hızlı başlangıç — adım adım (Kotlin)

  1. Proje oluşturun: New Project → Empty Activity, Kotlin, minSdk 24+.
  2. Bağımlılıkları ekleyin (module build.gradle.kts):
val room_version = "2.6.1"
implementation("androidx.room:room-runtime:$room_version")
implementation("androidx.room:room-ktx:$room_version")
kapt("androidx.room:room-compiler:$room_version")
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.3")
  1. Entity:
@Entity(tableName = "users")
data class User(
  @PrimaryKey(autoGenerate = true) val id: Long = 0,
  val name: String,
  val age: Int
)
  1. Dao:
@Dao
interface UserDao {
  @Query("SELECT * FROM users") fun getAll(): LiveData<List<User>>
  @Insert(onConflict = OnConflictStrategy.REPLACE) suspend fun insert(user: User)
  @Delete suspend fun delete(user: User)
}
  1. Database:
@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
  abstract fun userDao(): UserDao
}
  1. ViewModel ve kullanım:
class UserViewModel(app: Application): AndroidViewModel(app) {
  private val db = Room.databaseBuilder(app, AppDatabase::class.java, "db").build()
  val users: LiveData<List<User>> = db.userDao().getAll()
  suspend fun add(user: User) = db.userDao().insert(user)
}

Activity/Fragment içinde — users'ı observe edin ve insert işlemini coroutine içinde başlatın (viewModelScope.launch).

Room sorgularını UI thread'inde çalıştıramazsınız: suspend, Flow veya LiveData ve coroutines/Dispatchers.IO kullanın.

Yeni başlayanların sık yaptığı hatalar

  • Şema değişikliğinde unutulmuş migrasyonlar → güncelleme sırasında çökme: Migration ekleyin veya yalnızca erken prototiplerde fallbackToDestructiveMigration kullanın.
  • Main thread'i bloklama: SELECT bile eşzamanlı olarak yapılmalıdır.
  • Sık filtrelenen alanlarda indeks eksikliği → yavaş sorgular.
  • Entity içinde yanlış türler → NULL/veri kaybı. Non-nullable türleri ve dönüştürücüler (TypeConverters) kullanın.

SSS

  • SQL öğrenmek gerekir mi? Evet — temel SQL, karmaşık sorgularda yardımcı olur ancak çoğu CRUD işlemi için Room ile @Query ve DAO yeterlidir.
  • Mevcut bir .db dosyası bağlanabilir mi? Evet — Room, önceden paketlenmiş veritabanlarını (createFromAsset/createFromFile) ve migrasyonları destekler.
  • SQLite ne zaman tercih edilmelidir? Jetpack bağımlılığı olmayan minimal görevler için veya veritabanı çekirdeğini öğrenirken.

Sonuç: Room ile başlayın — hızlıca çalışan, güvenli ve ölçeklenebilir kod elde edin. Düşük seviyeli mekanizmaları anlamak için SQLite ile oynayın, ancak gerçek uygulamalar için Room'u seçin. Geliştirme sürecinizde başarılar!