Kuidas te loodaksite andmebaasi mobiilirakenduse jaoks?
sobes.tech AI
Vastus AI-lt
Lai izveidotu vietējo datu bāzi Android, es izmantotu Room Persistence Library:
Šī ir abstrakcija virs SQLite, kas vienkāršo darbu ar datu bāzi, nodrošinot anotētas API saskaņā ar shēmu, vaicājumiem un migrācijām:
Galvenie soļi:
-
Atkarību pievienošana:
// build.gradle (lietotnes līmenī) 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") // Korutīniem } -
Subjektu (Entities) izveide: POJO vai datu klases, kas atbilst tabulām datu bāzē.
@Entity,@PrimaryKey,@ColumnInfotiek izmantoti struktūras definēšanai:@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) izveide: Interfeisi, kas definē piekļuves metodes datiem (ievietošana, dzēšana, atjaunināšana, vaicājumi).
@Dao,@Insert,@Delete,@Update,@Querytiek izmantoti darbībām:@Dao interface UserDao { @Query("SELECT * FROM users") fun getAll(): List<User> @Insert fun insertAll(vararg users: User) @Delete fun delete(user: User) } -
Datu bāzes klases izveide: Abstrakta klase, kas manto no
RoomDatabase, nodrošina piekļuvi DAO un definē shēmu.@Databaseanotācijas norāda subjektus un versiju:@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 } } } } -
Darbs ar datu bāzi: Saņemt datu bāzes eksemplāru un veikt operācijas caur DAO:
val db = AppDatabase.getDatabase(applicationContext) val userDao = db.userDao() // Datu ievietošana (parasti fonā) GlobalScope.launch { userDao.insertAll(User(firstName = "John", lastName = "Doe")) } // Datu saņemšana GlobalScope.launch { val users = userDao.getAll() }
Room priekšrocības:
- Vaicājumu pārbaude kompilācijas laikā: SQL vaicājumi tiek pārbaudīti kompilācijas laikā, kas samazina kļūdu skaitu.
- Ērti strādāt ar plūsmām: Integrācija ar korutīniem vai LiveData atvieglo darbu ar datiem fonā.
- Viegla migrācija: Nodrošina rīkus shēmas izmaiņu pārvaldībai.
- Mazāk šablonveida koda salīdzinājumā ar nativu SQLite.
Ja prasības ir ļoti specifiskas vai ļoti mazas, var apsvērt Shared Preferences izmantošanu vienkāršām key-value pāriem, bet strukturētiem datiem un vaicājumiem Room ir priekšroka. Sarežģītākos scenārijos, kad nepieciešama sinhronizācija vai piekļuve no dažādiem avotiem (piemēram, tīmekļa), var apsvērt mākoņu datu bāzes, piemēram, Firebase Realtime Database vai Firestore, bet vietējai glabāšanai Room ir standarta un ieteicams risinājums.