Basis Data Room
Simpan data terstruktur secara lokal dengan Room. Definisikan Entity, DAO, dan kelas Database. Jalankan kueri dengan SQL, lalu amati hasilnya menggunakan LiveData atau Flow.
Basis Data Room adalah pelajaran Android Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 6. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Android Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Android Academy mencakup 6 pelajaran total.
Apa Itu Room?
Room adalah pustaka penyimpanan yang direkomendasikan Google untuk Android. Room merupakan pembungkus SQLite yang menyediakan:
- Kueri SQL yang aman terhadap tipe dan diverifikasi saat kompilasi
- Dukungan coroutine Kotlin
- Integrasi LiveData / Flow
- Dukungan migrasi untuk perubahan skema
Tiga Komponen Room
Room dibangun dari tiga anotasi:
@Entity— kelas data yang dipetakan ke tabel basis data@Dao(Objek Akses Data) — antarmuka dengan kueri SQL@Database— kelas basis data utama yang menghubungkan semuanya
Menambahkan Dependensi Room
Tambahkan Room ke app/build.gradle:
// 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
}Mendefinisikan Entity
Anotasikan kelas data dengan @Entity untuk membuat tabel basis data:
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 automaticallyMembuat DAO
Definisikan kueri dalam antarmuka DAO. Room membuat implementasinya untuk Anda:
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)
}Membuat Basis Data
Kelas @Database adalah titik masuk ke Room. Buat satu kali dan pertahankan sebagai singleton:
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 }
}
}
}
}Menggunakan Room di ViewModel
Hubungkan DAO di ViewModel menggunakan coroutine:
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)
}
}
}Mengamati Data Room di UI
Kumpulkan Flow dari Room di Activity atau Fragment Anda:
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
}
}
}
}Migrasi Basis Data
Saat Anda mengubah Entity (menambahkan kolom atau mengganti nama tabel), Anda harus menyediakan migrasi agar data pengguna yang sudah ada tidak hilang.
Tingkatkan nomor versi dalam @Database(version = 2) dan definisikan objek Migration dengan SQL untuk mengubah skema lama menjadi skema baru.
Pemeriksaan Singkat
Anotasi Room mana yang menandai metode antarmuka sebagai kueri SQL SELECT?
Ringkasan: Basis Data Room
Sekarang Anda dapat membuat aplikasi dengan penyimpanan data lokal:
@Entity— kelas data → tabel basis data@Dao— antarmuka dengan@Query,@Insert,@Delete@Database— titik masuk singleton- Kembalikan
Flow<List>dari DAO untuk pembaruan langsung - Panggil DAO dari ViewModel menggunakan
viewModelScope.launch
Berikutnya: tulis kode asinkron tanpa callback menggunakan Coroutines.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Basis Data Room” gratis?
Ya — teks lengkap “Basis Data Room” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Android Academy, upgrade ke CoddyKit PRO. Kursus Android Academy mencakup 6 pelajaran total.
Apa yang akan aku pelajari di “Basis Data Room”?
Simpan data terstruktur secara lokal dengan Room. Definisikan Entity, DAO, dan kelas Database. Jalankan kueri dengan SQL, lalu amati hasilnya menggunakan LiveData atau Flow. Kamu berlatih Android Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Android Academy?
Tidak diperlukan pengalaman sebelumnya. Android Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 6.
Berapa lama pelajaran “Basis Data Room” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Android Academy ini?
Ya. Setiap pelajaran Android Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- ViewModel & LiveData
- Basis Data Room
- Coroutine & Fungsi Suspend
- Pola Repository
- Komponen Navigasi
- Dependency Injection dengan Hilt