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:
-
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 } -
Varlıklar (Entities) oluştur: Veritabanındaki tabloları temsil eden POJO (Plain Old Java Object) veya veri sınıfları.
@Entity,@PrimaryKey,@ColumnInfoanotasyonları 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? ) -
DAO (Data Access Object) oluştur: Veri erişim metodlarını tanımlayan arayüzler (ekleme, silme, güncelleme, sorgular).
@Dao,@Insert,@Delete,@Update,@Queryanotasyonları 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) } -
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.@Databaseanotasyonu 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 } } } } -
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.