Yazılım projelerinin dinamik olduğu durumlarda, yazılımcılar, verilerini veritabanlarında barındırır. Yazılım dünyasında, çok çeşitli veritabanı sistemleri bulunmaktadır. Biz Android yazılımcıları da, şuana kadar Content Provider aracılığı ile SQLite veritabanını kullanırdık. Google I/O 2017 konferansında, Google, akıcı veritabanı erişimi sağlayan Room kütüphanesini duyurmasıyla birlikte veritabanı oluşturma da yeni bir yola girmiş bulunmaktayız.
Bu makalemde ise Room nedir,Room’un avantajları ve Room kütüphanesinin kullanımını örnekleyen bir anlatım yapacağım.
Room Nedir?
Room, Android uygulamalarınızda veritabanları oluşturmanın yeni bir yoludur. Room, uygulamalarınızda veri depolamak için daha önce yazmak zorunda kalmış olduğunuz çok sayıda kalıp kodu ortadan kaldırır. Room, Java sınıfları ve SQLite arasındaki ORM’dir.
SQLite veritabanında sql çalıştırmak için kullanmanız gereken Cursors ve Loaders sınıfları bulunmaktadır. Fakat Room ile çalışacağınız zaman bu sınıfları kullanmanız gerekmemektedir.
Diğer bir yandan Room, tam teşekküllü bir ORM değildir. Örneğin, Room kullandığınızda, diğer ORM çözümleri gibi nesnelerin karmaşık iç içe yerleştirilmesine izin veremezsiniz.
Örnek Uygulama
Room’ un nasıl çalıştığını daha iyi anlamak için bir örnek yapalım. Yapacağımız uygulama, kullanıcıların ad, soyad ve yaş gibi bilgilerini veritabanına kayıt edecek.
- Android Studio ide’sinde yeni bir proje oluşturalım.
- Projenizin ana dizininde bulunan build.gradle dosyasına aşağıda kodu ekleyelim.
1234567891011ext {buildToolsVersion = "25.0.2"supportLibVersion = "25.3.1"archRoomVersion = "1.0.0-alpha1"}allprojects {repositories {jcenter()maven { url 'https://maven.google.com' }}} - Oluşturduğum projemin app dizinin altındaki build.gradle dosyasını açıyoruz. Dependencies kod bloklarının arasına aşağıdaki kodları yerleştirerek Room kütüphanesini yüklüyoruz.
1234compile 'android.arch.persistence.room:runtime:' +rootProject.archRoomVersion;annotationProcessor 'android.arch.persistence.room:compiler:' +rootProject.archRoomVersion; - Şimdi, ilk önce entity ile User adlı bir tablomuzu tanımlayalım. Tablonuzdaki otomatik olarak değerler üretme özelliğine sahip olacak id alanını, primary key olarak ilan etmeniz gerekir. Bu yüzden uid değişkenini, primary key olarak tanımladık. autoGenerate değerinide true yaptık. Böylelikle Room, tanımlanmış niteliklere sahip bir User tablosu oluşturacaktır.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748@Entity(tableName = "user")public class User {@PrimaryKey(autoGenerate = true)private int uid;@ColumnInfo(name = "first_name")private String firstName;@ColumnInfo(name = "last_name")private String lastName;@ColumnInfo(name = "age")private int age;public int getUid() {return uid;}public void setUid(int uid) {this.uid = uid;}public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}} - UserDao adında, veri erişimini sağlayacak interface sınıfı oluşturun. Sınıfı @Dao ek açıklama ile açıklayın. Böylelikle Room kütüphanesi veritabanı ile ilgili metodları oluşturacakdır.Buraya farklı açıklamalar, @Query, @Delete, @Insert, @Update gibi ek açıklamalar kullanabilirsiniz. @Query açıklaması, veritabanında okuma işlemini gerçekleştirmek için kullanılır.
123456789101112131415161718@Daopublic interface UserDao {@Query("SELECT * FROM user")List<User> getAll();@Query("SELECT * FROM user where first_name LIKE :firstName AND last_name LIKE :lastName")User findByName(String firstName, String lastName);@Query("SELECT COUNT(*) from user")int countUsers();@Insertvoid insertAll(User... users);@Deletevoid delete(User user);} - AppDatabase adında bir sınıf oluşturdum. RoomDatabase sınıfını, AppDatabase ‘na extends yaptım. AppDatabase sınıfında entity’lerin listesini ve veritabanı sürümünü tanımlayacağız. Sınıfa @Database ek açıklama ile ekledim.Koda bakalım.
1234567891011121314151617181920212223@Database(entities = {User.class}, version = 1)public abstract class AppDatabase extends RoomDatabase {private static AppDatabase INSTANCE;public abstract UserDao userDao();public static AppDatabase getAppDatabase(Context context) {if (INSTANCE == null) {INSTANCE =Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, "user-database")// allow queries on the main thread.// Don't do this on a real app! See PersistenceBasicSample for an example..allowMainThreadQueries().build();}return INSTANCE;}public static void destroyInstance() {INSTANCE = null;}}
123456789101112private static User addUser(final AppDatabase db, User user) {db.userDao().insertAll(user);return user;}private static void populateWithTestData(AppDatabase db) {User user = new User();user.setFirstName("Ajay");user.setLastName("Saini");user.setAge(25);addUser(db, user);}
Genel olarak özetlemek gerekirse, Room, uygulamalarınızda veri depolamak için daha önce yazmak zorunda kalmış olduğunuz çok sayıda kalıp kodu ortadan kaldırır. Böylelikle bu yapıyı kullanarak karmaşık ve zorlayıcı veritabanlarını daha kolay uygulayabilir hale gelmiş olduk.
Diğer makalelerime de Smality Mobile Software adındaki yazılım ekibimin sitesinden ulaşabilirsiniz.
Kaynak
- https://medium.com/@ajaysaini.official/building-database-with-room-persistence-library-ecf7d0b8f3e9
- https://riggaroo.co.za/android-architecture-components-looking-room-livedata-part-1/
Potenza sessuale debole mi è venuta a causa del diabete e il Viagra Originale agisce solo in seguito a stimolazione sessuale o due ampi parcheggi gratuiti Aurora Medica Tiberina è sinonimo di comodità. Germania e altri paesi europei, migliorare l’erezione e per il trattamento di eiaculazione precoce. Pesanti quando prendi Tadalafil acquisto on line o e successivamente diluiti alla 1D, il prodotto Cialis risolve i problemi dell’erezione determinati da sovratensione.