Sobes.tech
Middle

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:

  1. 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
    }
    
  2. Varlıq (Entity) yaradılması: POJO və ya data sinifləri, cədvəlləri təmsil edir. @Entity, @PrimaryKey, @ColumnInfo anotasiya 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?
    )
    
  3. DAO (Data Access Object) yaradılması: Məlumatlara giriş metodlarını təyin edən interfeyslər. @Dao, @Insert, @Delete, @Update, @Query anotasiya istifadə olunur.

    @Dao
    interface UserDao {
        @Query("SELECT * FROM users")
        fun getAll(): List<User>
    
        @Insert
        fun insertAll(vararg users: User)
    
        @Delete
        fun delete(user: User)
    }
    
  4. 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. @Database anotasiya 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
                }
            }
        }
    }
    
  5. 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.