Mobil ilova uchun ma'lumotlar bazasini qanday yaratardingiz?
sobes.tech AI
AIdan javob
Androidda mahalliy ma'lumotlar bazasini yaratish uchun men Room Persistence Library dan foydalanardim.
Bu SQLite ustidan abstraktsiya bo'lib, sxemalar, so'rovlar va migratsiyalarni boshqarish uchun anotatsiyalangan API taqdim etadi.
Asosiy bosqichlar:
-
Qaramliklarni qo'shish:
// build.gradle (ilova darajasida) dependencies { implementation("androidx.room:room-runtime:2.6.1") annotationProcessor("androidx.room:room-compiler:2.6.1") // Java uchun kapt("androidx.room:room-compiler:2.6.1") // Kotlin uchun implementation("androidx.room:room-ktx:2.6.1") // Coroutine uchun } -
Entitilar (Entities) yaratish: POJO (Plain Old Java Object) yoki ma'lumotlar sinflari, ular ma'lumotlar bazasidagi jadvallarni ifodalaydi.
@Entity,@PrimaryKey,@ColumnInfoanotatsiyalari strukturani belgilash uchun ishlatiladi.@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) yaratish: Ma'lumotlarga kirish metodlarini belgilovchi interfeyslar (kiritish, o'chirish, yangilash, so'rovlar).
@Dao,@Insert,@Delete,@Update,@Queryanotatsiyalari ishlatiladi.@Dao interface UserDao { @Query("SELECT * FROM users") fun getAll(): List<User> @Insert fun insertAll(vararg users: User) @Delete fun delete(user: User) } -
Ma'lumotlar bazasi sinfi yaratish:
RoomDatabasedan meros olgan abstrakt sinf, DAO ga kirishni ta'minlaydi va ma'lumotlar bazasining sxemasini belgilaydi.@Databaseanotatsiyasi entitilar va versiyani ko'rsatadi.@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 } } } } -
Ma'lumotlar bazasi bilan ishlash: Nümunani olish va DAO orqali operatsiyalarni bajarish.
val db = AppDatabase.getDatabase(applicationContext) val userDao = db.userDao() // Ma'lumotlarni kiritish (odatda fon oqimida) GlobalScope.launch { userDao.insertAll(User(firstName = "John", lastName = "Doe")) } // Ma'lumotlarni olish GlobalScope.launch { val users = userDao.getAll() }
Room ning afzalliklari:
- So'rovlarni kompilyatsiya vaqtida tekshirish: SQL so'rovlar kompilyatsiya vaqtida tekshiriladi, bu bajarilishdagi xatoliklarni kamaytiradi.
- Fon oqimlari bilan ishlash oson: Coroutine yoki LiveData bilan integratsiya fon oqimida ma'lumotlar bilan ishlashni soddalashtiradi.
- Migratsiya qilish osonroq: sxema o'zgarishlarini boshqarish uchun vositalar taqdim etadi.
- Nativ SQLite ga nisbatan kamroq shablon kodi.
Agar talablar juda maxsus yoki kichik bo'lsa, Shared Preferences ni oddiy kalit-qiymat juftliklari uchun ishlatish mumkin, lekin strukturali ma'lumotlar va so'rovlar uchun Room afzal. Murakkabroq holatlar uchun, sinxronizatsiya yoki turli manbalardan (masalan, veb) kirish ehtiyoji bo'lsa, Firebase Realtime Database yoki Firestore kabi bulut bazalarini ko'rib chiqish mumkin, ammo mahalliy saqlash uchun Room standart va tavsiya etilgan yechimdir.