Android Room Nedir? (Kotlin’de kullanımı)

Elif Çetinkaya
4 min readJan 7, 2022

Android hakkındaki yazı serime Room’dan bahsederek devam edeceğim. Bir önceki Android Jetpack Nedir? adlı yazımda da bahsettiğim gibi Room, Android Architecture Components’in bir parçası olan kütüphanedir.

Bir uygulama oluşturdunuz ve uygulamayı kapattıktan sonra girdiğiniz bilgilerin silinmesini istemiyorsunuz. Ne yaparsınız? Tabii ki bir veri tabanı oluşturmak istersiniz. Android uygulaması geliştirirken verileri saklamanın birçok yolu vardır. Room da uygulamanız için veri tabanı oluşturmayı sağlar.

Room, kendisini şu şekilde açıklıyor;

Room, SQLite’ın tüm gücünden yararlanırken daha sağlam veri tabanı erişimine izin vermek için SQLite üzerinde bir soyutlama katmanı sağlar.

Peki neden şimdiye kadar hep kullandığımız SQLite yerine Room kullanmalıyız? Room kütüphanesi,

  • Derleme zamanında SQL sorgularını doğrular,
  • Boilerplate kod miktarını azaltır
  • Uygulamanızdaki SQLiteDatabase nesneleri ile çalışmayı kolaylaştırır.

Room kütüphanesi 3 bileşenden oluşur. Öncelikle bu bileşenleri açıklayıp sonrasında örnek üzerinden nasıl kullanıldıklarına değineceğim.

Entity: Veri tabanındaki bir tabloyu temsil eder. Entity bir model sınıfıdır. @Entity şeklinde açıklama eklenmelidir.

Dao (Database Access Objects): Veri tabanı üzerindeki işlemlerin gerçekleştirme yöntemlerini içerir. Dao bir interface olarak oluşturulur ve @Dao şeklinde belirtilmelidir.

Database: Veri tabanının oluşturulduğu sınıftır. @Database ile belirtilmelidir. Dao sınıfını içerir ve bu sınıf ile iletişim kurulmasını sağlar. Entity sınıfları da Database sınıfı içerisinde belirtilir.

Projemizi Oluşturalım

Şimdi gerekli açıklamaları yaptığımıza göre örneğimize geçebiliriz. Kısaca örnek uygulamadan bahsedeceğim. Girilen film bilgilerinin veri tabanına kaydedilmesini sağlayan bir uygulama yapacağız.

İlk olarak Android Studio’da boş bir proje açtıktan sonra build.gradle (app) içerisine Room kütüphanesini ekliyoruz. Versiyon değişikliği gibi durumlar için kodlara buradan da ulaşabilirsiniz.

Gerekli eklemeleri tamamladıktan sonra @Entity yani model sınıfımızı oluşturarak projemize başlıyoruz.

Model sınıfımız, veri tabanındaki tablomuz olacağından bu sınıfa yazılan her değişken bizim tablomuzdaki nesneleri oluşturacaktır. Bu sınıfın tablomuz olduğunu belirtmek için en başına @Entity ekliyoruz ve bunun içerisinde tableName kullanarak tablo ismini belirliyoruz. Tablo içerisindeki kolonları, yazdığımız değişkenler belirleyecektir bu sebeple kolon isimlerini @ColumnInfo diyerek eklememiz gerekmektedir. Her değişkenin üzerine vermek istediğimiz kolon ismini yazıyoruz. Tablomuzda olması gereken bir diğer değişken de her nesneyi birbirinden ayırmamızı sağlayacak id’mizdir. Bu değişkenin üzerine @PrimaryKey yazarak birincil anahtarımızı belirliyoruz. Tablodaki id değerleri otomatik olarak artacaksa bunu autoGenerate=true yazarak sağlıyoruz. Böylece model sınıfımızı oluşturmuş olduk.

Sıradaki sınıfımız Dao sınıfıdır. Bunun için bir interface oluşturuyoruz. Oluşturduğumuz interface’in en üstüne @Dao yazarak bu sınıfın bir Dao sınıfı olduğunu belirtiyoruz. Dao sınıfımız veri tabanı işlemlerini yönetebildiğimiz sınıftı bu yüzden bu sınıf içerisine veri tabanına veri ekleme (@Insert), silme (@Delete), güncelleme (@Update), sorgulama (@Query) işlemlerini ekleyebiliyoruz. Bunu yaparken sınıf içerisinde her biri için bir fonksiyon oluşturuyoruz ve fonksiyonların üzerinde gerekli belirtmeleri yapıyoruz. Burada sorgu işlemi sırasında tablodaki tüm verileri alıp liste şeklinde döndürme işlemi yapıyoruz. Dilerseniz bu sorguyu değiştirebilirsiniz.

Veri tabanımızı oluşturma işlemimizin son adımına geçebiliriz. Oluşturacağımız database sınıfı abstract bir sınıf olması gerekir ve RoomDatabase sınıfından extend edilmesi gerekiriyor. Bu işlemleri tamamladıktan sonra @Database diyerek sınıfı tanımlayıp bunun içerisinde entities yani model sınıfımızı (ya da sınıflarımızı ) ve versiyonumuzu belirtiyoruz. Version veri tabanımızın sürümüdür. Veri tabanında bir değişiklik yapacak olursak bu sürümü yükseltmemiz gerekir. Sınıfın içerisinde veri tabanındaki tüm değerleri çekmemizi sağlayan metodu yazıyoruz.

Veri tabanımızı oluşturduk. Şimdi veri tabanına nasıl veri ekleyeceğimize bakalım. Uygulamamızda film bilgileri ekleyeceğimizden bahsetmiştim. Girilecek bilgiler film adı, filmin türü, filmin yayınlandığı yıl ve IMDB puanıdır. Bu bilgileri veri tabanına eklemek için bir fonksiyon oluşturuyoruz. Girilen bilgilerin boş olup olmadığını kontrol ediyoruz ki boş bilgi girişi olmasın. Daha sonra Dao sınıfında oluşturduğumuz veri ekleme fonksiyonuna erişerek girilen verilerin eklenmesini sağlıyoruz.

Eklediğimiz verileri uygulamada göstererek projemizi sonlandıralım. Film bilgilerini göstermek için bir fonksiyon oluşturuyoruz. Burada fonksiyonumuzun adı showAllMovies olsun. Dao sınıfındaki sorgumuzla döndürdüğümüz verilerimizi burada bir listeye atarak gösteriyoruz.

Eklemek istediğimiz filmlerimiz veri tabanımıza eklendi ve gösterildi. Bu projenin tüm kodlarına erişmek için buraya tıklayabilirsiniz.

Room nedir ve Room kullanımını bir proje ile anlattıktan sonra yazımızın sonuna geldik. Umarım faydalı olmuştur. Bir sonraki yazıda görüşmek üzere.. :)

--

--