Sobes.tech
Middle

Bir mobil uygulama için veritabanı nasıl oluştururdunuz?

sobes.tech yapay zeka

AI'dan gelen yanıt

Android üzerinde yerel bir veritabanı oluşturmak için Room Persistence Library kullanırdım.

SQLite üzerine bir soyutlamadır ve şemalar, sorgular ve göçleri yönetmek için anotasyonlu bir API sağlar.

Ana adımlar:

  1. Bağımlılıkları ekle:

    // build.gradle (uygulama seviyesinde)
    dependencies {
        implementation("androidx.room:room-runtime:2.6.1")
        annotationProcessor("androidx.room:room-compiler:2.6.1") // Java için
        kapt("androidx.room:room-compiler:2.6.1") // Kotlin için
        implementation("androidx.room:room-ktx:2.6.1") // Coroutine desteği için
    }
    
  2. Varlıklar (Entities) oluştur: Veritabanındaki tabloları temsil eden POJO (Plain Old Java Object) veya veri sınıfları. @Entity, @PrimaryKey, @ColumnInfo anotasyonları yapılandırmayı tanımlamak için kullanılır.

    @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?
    )
    
  3. DAO (Data Access Object) oluştur: Veri erişim metodlarını tanımlayan arayüzler (ekleme, silme, güncelleme, sorgular). @Dao, @Insert, @Delete, @Update, @Query anotasyonları kullanılır.

    @Dao
    interface UserDao {
        @Query("SELECT * FROM users")
        fun getAll(): List<User>
    
        @Insert
        fun insertAll(vararg users: User)
    
        @Delete
        fun delete(user: User)
    }
    
  4. Veritabanı sınıfı oluştur: RoomDatabase'den türeyen soyut sınıf, DAO erişimi sağlar ve veritabanı şemasını tanımlar. @Database anotasyonu varlıkları ve sürümü belirtir.

    @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
                }
            }
        }
    }
    
  5. Veritabanı ile çalışma: Örnek alın ve DAO aracılığıyla işlemleri gerçekleştirin.

    val db = AppDatabase.getDatabase(applicationContext)
    val userDao = db.userDao()
    
    // Veri ekleme (genellikle arka planda)
    GlobalScope.launch {
        userDao.insertAll(User(firstName = "John", lastName = "Doe"))
    }
    
    // Veri alma
    GlobalScope.launch {
        val users = userDao.getAll()
    }
    

Room’un avantajları:

  • Derleme zamanında sorgu doğrulaması: SQL sorguları derleme sırasında doğrulanır, bu da çalışma zamanı hatalarını azaltır.
  • İşlemlerle kolay çalışma: Coroutine veya LiveData entegrasyonu, arka planda veri ile çalışmayı kolaylaştırır.
  • Daha kolay göç: Şema değişikliklerini yönetmek için araçlar sağlar.
  • Daha az şablon kodu ile yerel SQLite’a kıyasla.

Eğer gereksinimler çok özelse veya küçükse, Shared Preferences kullanmayı düşünebilirsiniz, ancak yapılandırılmış veriler ve sorgular için Room tercih edilir. Daha karmaşık senaryolar ve senkronizasyon veya farklı kaynaklardan erişim gerektiren durumlar (örneğin, web) için Firebase Realtime Database veya Firestore gibi bulut veritabanları kullanılabilir, ancak yerel depolama için Room standart ve önerilen çözümdür.