Banyak aplikasi Android membutuhkan penyimpanan offline, baik untuk menyimpan data user, cache API, draft form, hingga favorite items. Room Database adalah library resmi dari Jetpack yang mempermudah interaksi dengan SQLite menggunakan pendekatan modern, aman, dan efisien.
1. Tambahkan Dependency Room
implementation "androidx.room:room-runtime:2.6.0"
kapt "androidx.room:room-compiler:2.6.0"
implementation "androidx.room:room-ktx:2.6.0"
2. Membuat Entity (Tabel)
// User.kt
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity
data class User(
@PrimaryKey(autoGenerate = true) val id: Int = 0,
val name: String,
val email: String
)
3. Membuat DAO (Data Access Object)
// UserDao.kt
import androidx.room.*
@Dao
interface UserDao {
@Insert
suspend fun insert(user: User)
@Query("SELECT * FROM User ORDER BY id DESC")
suspend fun getUsers(): List<User>
@Delete
suspend fun delete(user: User)
}
4. Membuat Database
// AppDatabase.kt
import androidx.room.Database
import androidx.room.RoomDatabase
@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}
5. Inisialisasi Database
// DatabaseModule.kt
val db = Room.databaseBuilder(
context,
AppDatabase::class.java,
"my_database.db"
).build()
6. Menggunakan Repository Pattern
Repository memisahkan data source agar lebih rapi.
// UserRepository.kt
class UserRepository(private val dao: UserDao) {
suspend fun insert(user: User) = dao.insert(user)
suspend fun getUsers() = dao.getUsers()
suspend fun delete(user: User) = dao.delete(user)
}
7. Menggunakan ViewModel
// UserViewModel.kt
class UserViewModel(private val repo: UserRepository): ViewModel() {
val users = MutableLiveData<List<User>>()
fun load() {
viewModelScope.launch {
users.value = repo.getUsers()
}
}
fun addUser(name: String, email: String) {
viewModelScope.launch {
repo.insert(User(name = name, email = email))
load()
}
}
}
8. Menampilkan Data ke UI
// HomeActivity.kt
viewModel.users.observe(this) { list ->
listView.adapter = UserAdapter(list)
}
9. Best Practice Room Database
- Selalu gunakan Room, hindari akses raw SQLite.
- Gunakan DAO untuk semua operasi database.
- Gunakan ViewModel + Coroutines agar UI tetap responsif.
- Gunakan Repository Pattern untuk arsitektur bersih.
- Gunakan Flow atau LiveData untuk update realtime.
Room Database membuat penyimpanan offline menjadi lebih aman, efisien, dan mudah digunakan dalam aplikasi Android modern.