تكرار السؤال: …
الإجابة المختصرة
Entity لتمثيل جداول قاعدة البيانات وأعمدتها، و DAO لتعريف عمليات الاستعلام والإدخال، و RoomDatabase كنقطة الوصول المركزية للاتصال.
الشرح
توفر Room طبقة تجريد قوية فوق SQLite مع فحص استعلامات SQL وقت الترجمة (Compile-time Verification). الـ Entity عبارة عن data class موسومة بـ @Entity. الـ DAO عبارة عن interface يحتوي دوال الإدخال والتعديل والاستعلام مع دعم أصيل لـ Coroutines Flow. أما الـ RoomDatabase فيجمع الجداول ويدير فتح الاتصال وتحديث النسخ.
مثال بالكود
@Entity(tableName = "notes")
data class NoteEntity(
@PrimaryKey(autoGenerate = true) val id: Long = 0,
val title: String,
val content: String
)
@Dao
interface NoteDao {
@Query("SELECT * FROM notes ORDER BY id DESC")
fun getAllNotes(): Flow<List<NoteEntity>>
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insert(note: NoteEntity)
}أخطاء شائعة
- تنفيذ استعلامات Room المتزامنة على الـ Main Thread مما يسبب كراش فوري (IllegalStateException).
- إنشاء أكثر من نسخة من RoomDatabase بدلاً من استخدام نمط الـ Singleton لحقن نسخة وحيدة.