Ինչպե՞ս կստեղծեիք տվյալների բազա մոբայլ հավելվածի համար։
sobes.tech AI
Պատասխան AI-ից
Լոկալ տվյալների բազա ստեղծելու համար Android-ում ես օգտագործում էի Room Persistence Library:
Սա SQLite-ի վրա հիմնված ամպլիտուդ է, որը հեշտացնում է տվյալների բազայի հետ աշխատելը՝ տրամադրելով նշանագրված API՝ սքեմաների, հարցումների և միգրացիաների կառավարման համար:
Հիմնական քայլերը՝
-
Ավելացնել կախվածությունները:
// 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") // Կորուտինների համար } -
Ստեղծել սուբյեկտներ (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? ) -
Ստեղծել 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) } -
Ստեղծել Database-դասը: Աբստրակտ դաս, որը ժառանգում է
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 } } } } -
Տվյալների հետ աշխատել: Ստանալ բազայի օրինակ և կատարել գործողություններ 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() }
Առավելությունները՝
- Համակարգչային ստուգում հարցումների: SQL հարցումները ստուգվում են կոմպիլյացիայի ժամանակ, ինչը նվազեցնում է սխալների քանակը:
- Հեշտ գործել ֆոնային հոսքերի հետ: Կորուտինների կամ LiveData-ի ինտեգրացիան հեշտացնում է ֆոնային տվյալների աշխատանքը:
- Անհրաժեշտության դեպքում հեշտ միգրացիա: Տրամադրում է գործիքներ սքեմայի փոփոխությունների կառավարման համար:
- Փոքր քանակությամբ բլոկային կոդ՝ համեմատած նատիվ SQLite-ի:
Եթե պահանջները շատ հատուկ կամ շատ փոքր էին, հնարավոր էր օգտագործել Shared Preferences՝ պարզ key-value զույգերի համար, բայց կառուցվածքային տվյալների և հարցումների համար Room-ը նախընտրելի է։ Ավելի բարդ սցենարների համար՝ սինխրոնացման կամ տարբեր աղբյուրներից (օրինակ՝ վեբ) մուտքի անհրաժեշտությամբ, կարելի է դիտարկել ամպային տվյալների բազաներ, ինչպիսիք են Firebase Realtime Database կամ Firestore, բայց տեղական պահեստավորման համար Room-ը ստանդարտ և խորհուրդ է տրված լուծում։