Sobes.tech
Middle

Мобилдик колдонмо үчүн маалыматтар базасын кантип түзөр элеңиз?

sobes.tech AI

AIден жооп

Androidдө жергиликтүү маалымат базасын түзүү үчүн мен Room Persistence Library колдонмокмун:

Бул SQLite үстүндөгү абстракция, ал базанын иштешин жеңилдетет жана анноттогон API аркылуу схемалар, суроолор жана миграциялар башкарылат:

Негизги кадамдар:

  1. Тамырларды кошуу:

    // build.gradle (приложение деңгээли)
    dependencies {
        implementation("androidx.room:room-runtime:2.6.1")
        annotationProcessor("androidx.room:room-compiler:2.6.1") // Java үчүн
        kapt("androidx.room:room-compiler:2.6.1") // Kotlin үчүн
        implementation("androidx.room:room-ktx:2.6.1") // Coroutine үчүн
    }
    
  2. Объекттерди (Entities) түзүү: POJO же data класстары, базадагы таблицаларды көрсөтөт. @Entity, @PrimaryKey, @ColumnInfo белгилери структураны аныктоо үчүн колдонулат:

    @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 Objects) түзүү: Интерфейстер, маалыматка кирүү методдорун аныктайт (кошуу, өчүрүү, жаңылоо, суроолор). @Dao, @Insert, @Delete, @Update, @Query белгилери колдонулат:

    @Dao
    interface UserDao {
        @Query("SELECT * FROM users")
        fun getAll(): List<User>
    
        @Insert
        fun insertAll(vararg users: User)
    
        @Delete
        fun delete(user: User)
    }
    
  4. Маалымат базасы класын түзүү: RoomDatabaseтен мурас алган абстракт класс, ал DAOларга жетүүнү камсыз кылат жана базанын схемасын аныктайт. @Database белгилери объекттер жана версия үчүн колдонулат:

    @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. Маалыматтар менен иштөө: Базанын экземплярин алуу жана DAO аркылуу операцияларды жүргүзүү:

    val db = AppDatabase.getDatabase(applicationContext)
    val userDao = db.userDao()
    
    // Маалыматтарды кошуу (адатта фоновом тредде)
    GlobalScope.launch {
        userDao.insertAll(User(firstName = "John", lastName = "Doe"))
    }
    
    // Маалыматтарды алуу
    GlobalScope.launch {
        val users = userDao.getAll()
    }
    

Roomдун артыкчылыктары:

  • Суроолорду компиляциялоо убактысында текшерүү: SQL суроолору компиляциялоо учурунда текшерилет, бул каталардын санын азайтат.
  • Фондук агымдар менен иштөө оңой: Coroutine же LiveData менен интеграциясы фоновый режимде иштөөдө жеңилдетет.
  • Жөнөкөй миграция: схемадагы өзгөртүүлөрдү башкаруу үчүн инструменттерди камсыз кылат.
  • Нативдик SQLiteге салыштырмалуу аз шаблондуу код:

Эгер талаптар өтө атайын же өтө кичинекей болсо, анда Shared Preferences колдонуу каралышы мүмкүн, бирок структураланган маалыматтар жана суроолор үчүн Room артыкчылыкка ээ. Көчүрмө сценарийлер үчүн, синхрондоо же ар башка булактардан (мисалы, веб) жетүү керек болсо, Firebase Realtime Database же Firestore сыяктуу булуттуу базаларды карап чыгуу мүмкүн, бирок жергиликтүү сактоо үчүн Room стандарттуу жана сунушталган чечим болуп саналат.