Sobes.tech
Junior

Room və SQLite arasındakı fərq nədir?

sobes.tech Süni İntellekt

AI-dan cavab

SQLite yüngül, Android-ə daxil edilmiş əlaqəli verilənlər bazasıdır. Room isə SQLite üzərində abstraksiya kitabxanasıdır və verilənlər bazası ilə işləmək üçün daha yüksək səviyyəli API təqdim edir, qarşılıqlı əlaqəni sadələşdirir və səhv ehtimalını azaldır.

Əsas fərqlər:

  • ORM: Room obyekt-əlaqə xəritələşdiricisidir (Object-Relational Mapper), POJO sinifləri ilə işləməyə imkan verir, cədvəllər və sütunlar ilə birbaşa işləmək yerinə.
  • Təstiq yoxlamaları: Room sorğuları zamanı tələbləri yoxlayır, sintaksis səhvlərini və məlumat tiplərinin uyğunluq pozuntularını tətbiq başlamazdan əvvəl aşkarlayır.
  • Kodun sadələşdirilməsi: Room verilənlər bazası ilə işləmək üçün boilerplate kodu avtomatik yaradır (məsələn, POJO-dan cədvəl sətirlərinə və əksinə çevirmə), bu isə əl ilə yazılan kodu xeyli azaldır.
  • LiveData və Flow dəstəyi: Room Android Architecture Components-in LiveData və Flow kimi komponentləri ilə inteqrasiya edir, asinxron əməliyyatlar və məlumat dəyişikliklərinin izlənməsini asanlaşdırır.
  • Miqrasiya: Room verilənlər bazasının sxemində dəyişiklik edildikdə, miqrasiya üçün rahat mexanizm təqdim edir.

Room istifadə nümunəsi:

// Entitet
@Entity
data class User(
    @PrimaryKey val userId: Int,
    val name: String,
    val age: Int
)

// DAO (Data Access Object)
@Dao
interface UserDao {
    @Query("SELECT * FROM user")
    fun getAllUsers(): List<User>

    @Insert
    fun insertUser(user: User)
}

// Verilənlər bazası
@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}

SQLite ilə birbaşa istifadə nümunəsi SQLiteOpenHelper ilə:

// Verilənlər bazası üçün köməkçi
class DbHelper(context: Context) : SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) {

    override fun onCreate(db: SQLiteDatabase) {
        val createTableQuery = """
            CREATE TABLE users (
                _id INTEGER PRIMARY KEY AUTOINCREMENT,
                name TEXT,
                age INTEGER
            )
        """.trimIndent()
        db.execSQL(createTableQuery)
    }

    override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
        db.execSQL("DROP TABLE IF EXISTS users")
        onCreate(db)
    }

    companion object {
        private const val DATABASE_NAME = "mydatabase.db"
        private const val DATABASE_VERSION = 1
    }
}

// Məlumat əlavə etmə nümunəsi
val dbHelper = DbHelper(context)
val db = dbHelper.writableDatabase
val values = ContentValues().apply {
    put("name", "Alice")
    put("age", 30)
}
db.insert("users", null, values)
db.close()
Xüsusiyyət Room SQLite (birbaşa)
Növü ORM (abstraksiya kitabxanası) Əlaqəli verilənlər bazası
Veri ilə işləmə POJO obyektləri Sətirlər və sütunlar
Yoxlamalar Kompilyasiya zamanı Əsasən işləmə vaxtında
Boilerplate kod Avtomatik yaradılır Əl ilə yazmaq tələb olunur
AAC ilə inteqrasiya Bəli (LiveData, Flow) Yox
Miqrasiyalar Rahat API Əl ilə həyata keçirmək lazımdır
İstifadə rahatlığı Yüksək Aşağı, səhvlərə daha meylli

Room istifadəsi yeni inkişaflar üçün üstünlük təşkil edir, çünki verilənlər bazası ilə işləməni xeyli sadələşdirir, kodun etibarlılığını artırır və səhvlərin sayını azaldır. Birbaşa SQLite istifadəsi çox sadə hallarda və ya Room-in təmin edə bilmədiyi xüsusi tələblər üçün uyğun ola bilər.