Panduan Lengkap Membuat Database Lokal dengan Room di Android

  • Room bertindak sebagai lapisan abstraksi tingkat lanjut di atas SQLite untuk menyederhanakan penyimpanan data.
  • Arsitektur ini didasarkan pada tiga pilar: Entitas, DAO, dan kelas Basis Data.
  • Ini memungkinkan integrasi asli dengan komponen Jetpack seperti LiveData, ViewModel, dan Kotlin Coroutines.
  • Fitur ini menawarkan verifikasi kueri SQL selama kompilasi, sehingga secara drastis mengurangi kesalahan saat runtime.

Membuat Basis Data Lokal dengan Room di Android

Saat mengembangkan aplikasi yang menangani volume data terstruktur yang signifikan, kita menyadari bahwa kita tidak selalu dapat mengandalkan koneksi internet. Di sinilah kemampuan untuk menyimpan informasi secara lokal berperan , memungkinkan aplikasi untuk berfungsi bahkan dalam mode pesawat atau di area dengan jangkauan yang buruk. Skenario yang paling umum adalah membuat sistem caching sehingga pengguna dapat terus menjelajahi konten mereka tanpa gangguan.

Untuk mencapai hal ini tanpa terjebak dalam kode yang rumit, Google menawarkan pustaka Room. Pada dasarnya, ini adalah lapisan abstraksi di atas SQLite yang menghilangkan pekerjaan yang membosankan dan berulang dari pundak kita, memungkinkan kita untuk memanfaatkan kekuatan penuh basis data relasional dengan cara yang jauh lebih modern dan aman. Lupakan tentang menulis kode standar yang rawan kesalahan; Room membuat semuanya lebih terintegrasi.

Mengapa memilih Room dibandingkan SQLite tradisional?

Menggunakan API bawaan SQLite bisa sangat merepotkan karena sistemnya berlevel rendah. Salah satu risiko terbesar adalah pernyataan SQL tidak diperiksa hingga aplikasi dijalankan, artinya kesalahan ketik sederhana dapat menyebabkan aplikasi mogok secara tiba-tiba. Room mengatasi hal ini dengan menerapkan pemeriksaan kueri pada saat kompilasi , memberi tahu Anda jika ada yang salah bahkan sebelum Anda meluncurkan aplikasi di perangkat.

Selain itu, Room terintegrasi dengan mulus dengan arsitektur Jetpack, sangat memudahkan konsistensi data di semua layar. Dengan menggunakan anotasi yang memudahkan , kode berulang (boilerplate yang terkenal) berkurang drastis, membuat proyek jauh lebih mudah dipelihara dan diskalakan dalam jangka panjang.

Sistem manajemen basis data SQL dan NoSQL
Artikel terkait:
Aplikasi dan pengelola basis data SQL dan NoSQL di perangkat seluler.

Komponen-komponen penting arsitektur

Agar Room dapat berfungsi, kita perlu mengkoordinasikan tiga elemen mendasar yang bekerja sebagai sebuah tim:

  • Entitas: Ini adalah kelas Kotlin yang merepresentasikan tabel-tabel dalam basis data. Setiap instance dari sebuah entitas sesuai dengan sebuah baris dalam tabel yang bersangkutan.
  • Objek Akses Data (DAO): Ini adalah antarmuka tempat kita mendefinisikan metode untuk melakukan kueri, memasukkan, menghapus, atau memperbarui informasi. Antarmuka ini berfungsi sebagai jembatan antara logika aplikasi dan data.
  • Kelas Basis Data (RoomDatabase): Ini adalah titik akses utama dan kelas abstrak yang mempertahankan koneksi dan mendefinisikan entitas mana yang menjadi bagian dari sistem.

Konfigurasi teknis dan dependensi

Untuk mulai menggunakan Room, pertama-tama kita perlu menyiapkan file. build.gradlePenting untuk menambahkan dependensi dari runtime dan compilerJika Anda bekerja dengan Kotlin, Anda harus menggunakan kapt o ksp Untuk pemrosesan anotasi; ingatlah untuk tidak menyertakan keduanya agar terhindar dari konflik. Menambahkan ekstensi juga sangat disarankan. ruang-ktxyang memungkinkan penggunaan fungsi suspensi dan koroutinMencegah antarmuka pengguna membeku saat melakukan operasi berat.

Menerapkan lapisan data langkah demi langkah

Pertama-tama kita definisikan EntitasKami menggunakan anotasi @Entity untuk memberi tahu Room bahwa kelas ini adalah sebuah meja. Di dalamnya, kita harus menandai sebuah kolom dengan @PrimaryKey untuk membuat setiap data unik; jika kita ingin basis data secara otomatis menetapkan ID, kita menggunakan autoGenerate = true. Kita juga bisa menggunakan @ColumnInfo jika kita ingin kolom di SQLite memiliki nama yang berbeda dari variabel di Kotlin.

Kemudian kita lanjut ke DAODi sini kita membuat antarmuka beranotasi dengan @DaoUntuk operasi sederhana seperti menyisipkan atau menghapus, kita menggunakan anotasi. @Insert, @Update y @DeleteNamun, untuk pencarian khusus, kami menggunakan @Query, di mana kita menulis pernyataan SQL secara langsung. Trik yang sangat berguna adalah kita bisa Kembalikan LiveData atau FlowHal ini memungkinkan antarmuka untuk memperbarui dirinya sendiri segera setelah data dalam tabel berubah.

Terakhir, kami mengkonfigurasi Basis Data RuanganKelas ini harus abstrak dan mewarisi dari RoomDatabaseAnotasi berikut ditambahkan: @Database Menunjukkan semua entitas yang dikandungnya dan versi basis data. Untuk menghindari pembukaan beberapa instance basis data secara bersamaan, solusi idealnya adalah mengimplementasikan Pola tunggal melalui a companion object dengan suatu metode getInstance.

Integrasi dengan arsitektur MVVM dan repositori

Agar aplikasi terlihat profesional, kita tidak boleh mengakses basis data secara langsung dari tampilan. Idealnya, kita harus menggunakan repository . Repository bertindak sebagai perantara, memutuskan apakah data diambil dari jaringan atau cache lokal. Misalnya, kita dapat memprogram aplikasi untuk terlebih dahulu mencoba mendapatkan data dari DAO dan, jika daftarnya kosong dan ada koneksi, membuat permintaan ke server melalui REST API.

Alur ini diakhiri dengan LihatModelyang bertanggung jawab untuk mengekspos data ke fragmen atau aktivitas. Saat menggunakan AndroidViewModelkita memiliki akses ke konteks aplikasi untuk menginisialisasi basis data. Dengan cara ini, kita mencapai pemisahan tanggung jawab di mana tampilan hanya mengamati status data dan tidak peduli dari mana asalnya atau bagaimana cara penyimpanannya.

Fitur dan optimasi lainnya

Room memungkinkan Anda untuk menangani hubungan kompleks antar tabel menggunakan kunci asing dan kemampuan untuk menyematkan entitas di dalam entitas lain dengan @EmbeddedJika sewaktu-waktu kita perlu mengubah struktur tabel (misalnya, menambahkan kolom), Room menawarkan kepada kita rute migrasi yang dioptimalkan agar pengguna tidak kehilangan data mereka saat memperbarui aplikasi.

Bagi mereka yang ingin meningkatkan persistensi ke level berikutnya, ada alat eksperimental yang memungkinkan Anda untuk menghasilkan endpoint HTTP berdasarkan Room DAO, memfasilitasi komunikasi tanpa hambatan antara server Kotlin dan aplikasi Android dengan filosofi offline-first , memastikan bahwa pengalaman pengguna selalu lancar terlepas dari koneksi mereka.

Sistem manajemen basis data SQL dan NoSQL
Artikel terkait:
Aplikasi dan pengelola basis data SQL dan NoSQL di perangkat seluler.

Implementasi Room mentransformasi manajemen data di Android, menghilangkan kerapuhan SQLite dan menyediakan alur kerja yang tangguh berdasarkan komponen Jetpack. Dengan menggabungkan entitas yang jelas, DAO yang efisien, dan basis data terpusat menggunakan pola Singleton, kami mencapai aplikasi yang jauh lebih cepat yang dapat berfungsi secara offline dan sangat mudah dipelihara berkat pemeriksaan kesalahan selama kompilasi. Bagikan informasi ini agar lebih banyak orang dapat mempelajarinya.


Tambahkan sebagai sumber pilihan di Google