Implementasi Local Database di Android

Dipublikasikan: 12 Januari 2025 • Kategori: Android • Penulis: Jumanto

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

Room Database membuat penyimpanan offline menjadi lebih aman, efisien, dan mudah digunakan dalam aplikasi Android modern.

← Kembali ke Blog