Mobil tətbiq üçün verilənlər bazasını necə yarardınız?
sobes.tech Süni İntellekt
AI-dan cavab
Android-də yerli verilənlər bazası yaratmaq üçün mən Room Persistence Library istifadə edərdim.
Bu, SQLite üzərində bir abstraksiyadır və verilənlər bazası ilə işləməni sadələşdirir, şemaların yaradılması, sorğular və miqrasiya idarəçiliyi üçün anotasiya edilmiş API təmin edir.
Əsas addımlar:
-
Asılılıqları əlavə edin:
// build.gradle-də (app səviyyəsində) dependencies { implementation("androidx.room:room-runtime:2.6.1") annotationProcessor("androidx.room:room-compiler:2.6.1") // Java üçün kapt("androidx.room:room-compiler:2.6.1") // Kotlin üçün implementation("androidx.room:room-ktx:2.6.1") // Corutinalar üçün } -
Varlıq (Entity) yaradılması: POJO və ya data sinifləri, cədvəlləri təmsil edir.
@Entity,@PrimaryKey,@ColumnInfoanotasiya istifadə olunur.@Entity(tableName = "users") data class User( @PrimaryKey(autoGenerate = true) val id: Int = 0, @ColumnInfo(name = "first_name") val firstName: String?, @ColumnInfo(name = "last_name") val lastName: String? ) -
DAO (Data Access Object) yaradılması: Məlumatlara giriş metodlarını təyin edən interfeyslər.
@Dao,@Insert,@Delete,@Update,@Queryanotasiya istifadə olunur.@Dao interface UserDao { @Query("SELECT * FROM users") fun getAll(): List<User> @Insert fun insertAll(vararg users: User) @Delete fun delete(user: User) } -
Database sinfi yaradılması:
RoomDatabase-dən irs alan abstrakt sinif, DAO-ya giriş və verilənlər bazası şemasını müəyyən edir.@Databaseanotasiya istifadə olunur.@Database(entities = [User::class], version = 1) abstract class AppDatabase : RoomDatabase() { abstract fun userDao(): UserDao companion object { @Volatile private var INSTANCE: AppDatabase? = null fun getDatabase(context: Context): AppDatabase { return INSTANCE ?: synchronized(this) { val instance = Room.databaseBuilder( context.applicationContext, AppDatabase::class.java, "app_database" ).build() INSTANCE = instance instance } } } } -
Verilənlər bazası ilə işləmək: Verilənlər bazası nümunəsini almaq və DAO vasitəsilə əməliyyatlar etmək.
val db = AppDatabase.getDatabase(applicationContext) val userDao = db.userDao() // Məlumatların daxil edilməsi (adətən fon axınında) GlobalScope.launch { userDao.insertAll(User(firstName = "John", lastName = "Doe")) } // Məlumatların alınması GlobalScope.launch { val users = userDao.getAll() }
Room-un üstünlükləri:
- Sorğuların tərtibçi tərəfindən yoxlanması: SQL sorğuları tərtib zamanı yoxlanır, bu da icra zamanı səhvləri azaldır.
- Ağır iş axınları ilə işləmək asanlığı: Coroutine və ya LiveData ilə inteqrasiya, məlumatların fon axınında işlənməsini sadələşdirir.
- Daha sadə miqrasiya: Verilənlər bazası şemasında dəyişiklikləri idarə etmək üçün alətlər təqdim edir.
- Daha az şablon kod və nativ SQLite ilə müqayisədə.
Əgər tələblər çox spesifik və ya çox kiçik olsaydı, sadə açar-dəyər cütləri üçün Shared Preferences istifadə edilə bilərdi, lakin strukturlaşdırılmış məlumatlar və sorğular üçün Room üstün seçimdir. Daha mürəkkəb ssenarilər üçün, sinxronizasiya və ya müxtəlif mənbələrdən (məsələn, veb) giriş ehtiyacı olan hallarda, Firebase Realtime Database və ya Firestore kimi bulud bazalarını istifadə etmək də mümkündür, lakin yerli saxlama üçün Room standart və tövsiyə olunan həll yoludur.