Room Veritabanı
Room ile yapılandırılmış verileri yerel olarak kalıcı hâle getirin. Varlıkları, DAO'ları ve Database sınıfını tanımlayın. SQL ile sorgulayın, sonuçları LiveData veya Flow ile gözlemleyin.
Room Veritabanı, CoddyKit'te ücretsiz bir Android Academy dersidir. Bu, 6 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Android Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Android Academy kursu toplamda 6 dersten oluşur.
Room Nedir
Room, Google'ın Android için önerdiği kalıcı depolama kütüphanesidir. Size şunları sunan bir SQLite sarmalayıcısıdır:
- Derleme zamanında doğrulanan tür güvenli SQL sorguları
- Kotlin eş yordam desteği
- LiveData / Flow bütünleştirmesi
- Şema değişiklikleri için geçiş desteği
Room'un Üç Bileşeni
Room üç ek açıklamadan oluşur:
@Entity— bir veritabanı tablosuyla eşleşen veri sınıfı@Dao(Veri Erişim Nesnesi) — SQL sorguları içeren bir arayüz@Database— her şeyi bir araya getiren ana veritabanı sınıfı
Room Bağımlılıklarını Ekleme
Room'u app/build.gradle dosyasına ekleyin:
// app/build.gradle
plugins {
id 'kotlin-kapt' // needed for Room annotation processor
}
dependencies {
val roomVersion = "2.6.1"
implementation "androidx.room:room-runtime:$roomVersion"
kapt "androidx.room:room-compiler:$roomVersion"
implementation "androidx.room:room-ktx:$roomVersion" // coroutine support
}Entity Tanımlama
Bir veritabanı tablosu oluşturmak için veri sınıfına @Entity ek açıklamasını uygulayın:
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity(tableName = "notes")
data class Note(
@PrimaryKey(autoGenerate = true)
val id: Int = 0,
val title: String,
val body: String,
val createdAt: Long = System.currentTimeMillis()
)
// Each field = one column in the database table
// @PrimaryKey autoGenerate = Room assigns the id automaticallyDAO Oluşturma
Sorguları bir DAO arayüzünde tanımlayın. Room uygulamayı sizin için oluşturur:
import androidx.room.*
import kotlinx.coroutines.flow.Flow
@Dao
interface NoteDao {
@Query("SELECT * FROM notes ORDER BY createdAt DESC")
fun getAllNotes(): Flow<List<Note>> // emits new list whenever data changes
@Query("SELECT * FROM notes WHERE id = :noteId")
suspend fun getNoteById(noteId: Int): Note?
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insert(note: Note)
@Update
suspend fun update(note: Note)
@Delete
suspend fun delete(note: Note)
}Veritabanı Oluşturma
@Database sınıfı Room'a giriş noktasıdır. Bunu bir kez oluşturun ve tekil örnek olarak tutun:
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import android.content.Context
@Database(entities = [Note::class], version = 1, exportSchema = false)
abstract class NoteDatabase : RoomDatabase() {
abstract fun noteDao(): NoteDao
companion object {
@Volatile private var INSTANCE: NoteDatabase? = null
fun getInstance(context: Context): NoteDatabase {
return INSTANCE ?: synchronized(this) {
Room.databaseBuilder(
context.applicationContext,
NoteDatabase::class.java,
"note_database"
).build().also { INSTANCE = it }
}
}
}
}ViewModel'de Room Kullanma
Eş yordamları kullanarak DAO'yu bir ViewModel'e bağlayın:
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.launch
class NoteViewModel(private val dao: NoteDao) : ViewModel() {
val notes = dao.getAllNotes() // Flow — auto-updates when DB changes
fun addNote(title: String, body: String) {
viewModelScope.launch {
dao.insert(Note(title = title, body = body))
}
}
fun deleteNote(note: Note) {
viewModelScope.launch {
dao.delete(note)
}
}
}Kullanıcı Arayüzünde Room Verilerini Gözlemleme
Room'dan gelen Flow'u Activity veya Fragment'ınızda toplayın:
import androidx.lifecycle.lifecycleScope
import kotlinx.coroutines.launch
class NoteActivity : AppCompatActivity() {
private val viewModel: NoteViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ...
lifecycleScope.launch {
viewModel.notes.collect { notes ->
adapter.submitList(notes) // update RecyclerView
}
}
}
}Veritabanı Geçişleri
Entity'nizi değiştirdiğinizde (sütun eklemek veya tabloyu yeniden adlandırmak gibi), mevcut kullanıcı verilerinin kaybolmaması için bir geçiş sağlamanız gerekir.
@Database(version = 2) içindeki sürüm numarasını artırın ve eski şemayı yenisine dönüştürecek SQL'i içeren bir Migration nesnesi tanımlayın.
Hızlı Kontrol
Bir arayüz yöntemini SQL SELECT sorgusu olarak işaretleyen Room ek açıklaması hangisidir?
Özet: Room Veritabanı
Artık yerel veri kalıcılığına sahip uygulamalar oluşturabilirsiniz:
@Entity— veri sınıfı → veritabanı tablosu@Dao—@Query,@Insert,@Deleteiçeren arayüz@Database— tekil giriş noktası- Canlı güncellemeler için DAO'dan
Flow<List>döndürün - DAO'yu ViewModel'den
viewModelScope.launchkullanarak çağırın
Sırada: eş yordamlarla geri çağırmalar olmadan eş zamanlı kod yazma var.
Sıkça Sorulan Sorular
“Room Veritabanı” dersi ücretsiz mi?
Evet — “Room Veritabanı” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Android Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Android Academy kursu toplamda 6 dersten oluşur.
“Room Veritabanı” dersinde ne öğreneceğim?
Room ile yapılandırılmış verileri yerel olarak kalıcı hâle getirin. Varlıkları, DAO'ları ve Database sınıfını tanımlayın. SQL ile sorgulayın, sonuçları LiveData veya Flow ile gözlemleyin. Android Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Android Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Android Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 6 dersinin 2. dersidir.
“Room Veritabanı” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Android Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Android Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- ViewModel ve LiveData
- Room Veritabanı
- Coroutines ve Suspend Fonksiyonları
- Repository Deseni
- Navigation Bileşeni
- Hilt ile Bağımlılık Enjeksiyonu