SQLite, Room ve Firebase Realtime Database dahil olmak üzere Android’de kullanılabilecek birkaç veritabanı vardır.
Android Room Nedir?
Android Room, Android platformunda SQLite veritabanını kullanmak için tasarlanmış bir veritabanı yapılandırma aracıdır. Room, SQLite veritabanını daha kolay ve güvenli kullanmanıza olanak tanır ve veritabanı işlemlerini daha yapısal bir şekilde yapmanıza yardımcı olur.
Room, veritabanındaki verileri Java objelerine dönüştürür ve veritabanı işlemlerini bu objeler üzerinden yapmanıza olanak tanır. Bu, veritabanı işlemlerinin daha okunabilir ve anlaşılabilir olmasını sağlar ve hataların önlenmesine yardımcı olur. Room ayrıca, veritabanının farklı versiyonları arasındaki değişiklikleri yönetmeyi kolaylaştırır ve veritabanının güncellenmesini daha kolay hale getirir.
Room, veritabanının yanı sıra LiveData ve RxJava gibi fonksiyonlarla da birlikte çalışabilir ve veritabanındaki verilerin asenkron olarak okunmasını ve güncellenmesini sağlar.
Kısacası, Android Room, Android platformunda veritabanı kullanmak isteyen geliştiriciler için kullanımı kolay ve güvenli bir veritabanı yapılandırma aracıdır.
Android Room Projeye Nasıl Eklenir?
Android Room, bir Android projesine eklemek için aşağıdaki adımları takip etmeniz gerekir.
Adım 1: Gradle dosyanıza Room kütüphanesini eklemek için proje dizinine gidin ve app/build.gradle
dosyasına gidin. Aşağıdaki satırları dependencies
bloğunun içine ekleyin:
1 2 3 4 5 6 7 8 9 10 11 | .... dependencies { def room_version = "2.5.0" implementation "androidx.room:room-runtime:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version" .... |
Adım 2: Veritabanı için bir model sınıfı oluşturun. Model sınıfı, veritabanındaki bir tablonun Java objesi olarak tanımlanmasını sağlar. Örneğin, aşağıdaki gibi bir kullanıcı model sınıfı oluşturabilirsiniz:
Ogrenci.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | import androidx.room.ColumnInfo; import androidx.room.Entity; import androidx.room.PrimaryKey; @Entity(tableName="ogrenci") public class Ogrenci { @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "id") private int id; @ColumnInfo(name = "ad") private String ad; @ColumnInfo(name = "yas") private int yas; /*Kurucu Metot*/ public Ogrenci(String ad, int yas) { this.ad = ad; this.yas = yas; } /*Getter ve Setter Metotları*/ public int getId() { return id; } public void setId(int id) { this.id = id; } public String getAd() { return ad; } public void setName(String Ad) { this.ad = Ad; } public int getYas() { return yas; } public void setYas(int yas) { this.yas = yas; } } |
Adım 3: Veritabanındaki verileri erişmek için bir DAO (Data Access Object) sınıfı oluşturun. DAO sınıfı, veritabanındaki verileri okuma, yazma, güncelleme ve silme işlemlerini tanımlar. Örneğin, aşağıdaki gibi bir öğrenci DAO sınıfı oluşturabilirsiniz:
OgrenciDAO.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | import androidx.room.Dao; import androidx.room.Delete; import androidx.room.Insert; import androidx.room.Query; import androidx.room.Update; import java.util.List; @Dao public interface OgrenciDao { @Insert void insert(Ogrenci ogrenci); @Query("SELECT * FROM ogrenci") List<Ogrenci> getAll(); @Update void update(Ogrenci ogrenci); @Delete void delete(Ogrenci ogrenci); } |
Adım 4: Veritabanını tanımlayın. Veritabanı, RoomDatabase sınıfından türetilen bir sınıf olarak tanımlanır. Veritabanı sınıfı, DAO sınıfını ve veritabanı versiyonunu tanımlar. Örneğin, aşağıdaki gibi bir veritabanı sınıfı oluşturabilirsiniz:
AppDatabase.java
1 2 3 4 5 6 7 8 9 | import androidx.room.Database; import androidx.room.RoomDatabase; @Database(entities = {Ogrenci.class}, version = 1) public abstract class AppDatabase extends RoomDatabase { public abstract OgrenciDao OgrenciDao(); } |
Adım 5: Veritabanını kullanmak için bir veritabanı nesnesi oluşturun. Veritabanı nesnesi, veritabanı sınıfından türetilen bir nesne olarak oluşturulur ve veritabanının kullanılması için gerekli olan context ve veritabanı adı gibi parametrelerle birlikte verilir. Örneğin, aşağıdaki gibi bir veritabanı nesnesi oluşturabilirsiniz:
Bu noktadan sonra, veritabanı işlemleri için db.ogrenciDao()
metodunu kullanabilirsiniz. Örneğin, bir kullanıcı eklemek için aşağıdaki gibi bir kod yazabilirsiniz:
1 2 3 4 5 6 | Ogrenci ogrenci = new Ogrenci("Hayri KOC",41); ogrenci.setYas(40); db.OgrenciDao().insert(ogrenci); |
Yine aynı şekilde veritabanında bulunan tüm kayıtları almak için ogrenciDao
içindeki getAll()
olarak oluşturduğumuz metodu kullanabilirsiniz:
1 2 3 4 5 6 | List<Ogrenci> ogrenciler = ogrenciDao.getAll(); for (Ogrenci ogr : ogrenciler) { Log.d("Öğrenci", "Id: " + ogr.getId() + " Ad: " + ogr.getAd() + " Yaş: " + ogr.getYas()); } |
MainActivity
içindeki test etmek için OnCreate
metodu içinde aşağıdaki gibi Executors
ile Thread açarak test edebilirsiniz.
MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | import androidx.appcompat.app.AppCompatActivity; import androidx.room.Room; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import java.util.List; import java.util.concurrent.Executors; public class MainActivity extends AppCompatActivity { private OgrenciDao ogrenciDao; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); AppDatabase db = Room.databaseBuilder(this, AppDatabase.class, "database-isim").build(); ogrenciDao = db.OgrenciDao(); Executors.newSingleThreadExecutor().execute(new Runnable() { @Override public void run() { //Kayıt Ekleme Ogrenci ogrenci = new Ogrenci("Hüseyin ÖZ", 40); ogrenciDao.insert(ogrenci); //Kayıtları Listeleme List<Ogrenci> ogrenciler = ogrenciDao.getAll(); for (Ogrenci ogr : ogrenciler) { Log.d("Öğrenci", "Id: " + ogr.getId() + " Ad: " + ogr.getAd() + " Yaş: " + ogr.getYas()); } Log.d("MainActivity", "Öğrenciler: " + ogrenciler); } }); } } |

XML Layout ile Android Room Kullanma
activity_main.xml

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <EditText android:id="@+id/ogrAd" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="36dp" android:ems="10" android:hint="İsim girin...." android:inputType="textPersonName" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.497" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <EditText android:id="@+id/ogrYas" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="32dp" android:ems="10" android:hint="Yaş girin..." android:inputType="textPersonName" app:layout_constraintEnd_toEndOf="@+id/ogrAd" app:layout_constraintStart_toStartOf="@+id/ogrAd" app:layout_constraintTop_toBottomOf="@+id/ogrAd" /> <Button android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="32dp" android:text="Kaydet" app:layout_constraintEnd_toEndOf="@+id/ogrYas" app:layout_constraintStart_toStartOf="@+id/ogrYas" app:layout_constraintTop_toBottomOf="@+id/ogrYas" /> </androidx.constraintlayout.widget.ConstraintLayout> |
MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | import androidx.appcompat.app.AppCompatActivity; import androidx.room.Room; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import java.util.List; import java.util.concurrent.Executors; public class MainActivity extends AppCompatActivity { private OgrenciDao ogrenciDao; private EditText editAd,editYas; private Button btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); AppDatabase db = Room.databaseBuilder(this, AppDatabase.class, "database-isim").build(); ogrenciDao = db.OgrenciDao(); btn = (Button) findViewById(R.id.btn); editAd =(EditText) findViewById(R.id.ogrAd); editYas= (EditText) findViewById(R.id.ogrYas); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Executors Executors.newSingleThreadExecutor().execute(new Runnable() { @Override public void run() { //Kayıt Ekleme Ogrenci ogrenci = new Ogrenci(editAd.getText().toString(), Integer.parseInt(editYas.getText().toString())); ogrenciDao.insert(ogrenci); //Kayıtları Listeleme List<Ogrenci> ogrenciler = ogrenciDao.getAll(); for (Ogrenci ogr : ogrenciler) { Log.d("Öğrenci", "Id: " + ogr.getId() + " Ad: " + ogr.getAd() + " Yaş: " + ogr.getYas()); } Log.d("MainActivity", "Öğrenciler: " + ogrenciler); } }); //Executors } //onClick }); //View.OnClickListener }//OnCreate } |
Android Room Parametre Kullanarak Sorgulama
Ayrıca Room yapısını kullanarak Android platformunda verilerinizi sorgulayabilirsiniz. Aşağıdaki örnekte öğrenciler belirli bir yaş aralığına göre sınırlandırılmıştır.
OgrenciDoa.java
1 2 3 4 5 6 7 8 | .... @Query("SELECT * FROM ogrenci WHERE yas >= :minYas AND yas <= :maxYas") List<Ogrenci> getOgrenciYasAralik(int minYas, int maxYas); .... |
Android Room Annotation Listesi
Android Room veritabanı sınıflarını tanımlamak ve veritabanına erişmek için kullanabileceğiniz bir dizi annotation bulunmaktadır. Bunların bazıları şunlardır:
@Entity
: Veritabanında saklanacak veri nesnesi tanımlanır.@PrimaryKey
: Bir veri nesnesinin birincil anahtarı tanımlanır.@ColumnInfo
: Veri nesnesinin bir sütununu etiketlemek için kullanılır.@Ignore
: Veri nesnesinin serilize edilmeyecek olan bir alanı belirtmek için kullanılır.@Dao
: Veritabanındaki verileri okuma, ekleme, güncelleme ve silme işlemlerini yapmak için kullanılan arayüzdür.@Query
: Veritabanındaki verileri sorgulamak için SQL sorguları yazmak için kullanılır.@Insert
: Veritabanına veri eklemek için kullanılır.@Update
: Veritabanındaki veriyi güncellemek için kullanılır.@Delete
: Veritabanındaki veriyi silmek için kullanılır.@Transaction
: Veritabanı işlemlerinin bir bütün olarak işlenmesini sağlamak için kullanılır.
Yorum Yap