BİL209U-MOBİL UYGULAMA GELİŞTİRME
Ünite 6: Mobil Uygulamalarda Veri Tabanı Uygulamaları
Giriş
Veri programcılığı mobil uygulamaların oldukça yaygın kullanımlarındandır. Verilerin sorgulanması ve işlenmesi için veri tabanlarına ihtiyaç duyulmaktadır. Mobil uygulamalarda en sık kullanılan veritabanı Sqlite'dır.
Bu ünitede Sqlite ile ilgili verilerin nasıl alınacağını, yazılacağını, silineceğini ve güncelleneceğini göreceğiz. Bu işlemler esnasında ortam etkileri göz önünde bulundurulduğunda veri işleme hızında donanım, ağ ve yazılım gecikmeleri göz önünde bulundurulmalıdır. Olası gecikmelere karşı veri tabanı işlemek için asenkron işlemler kullanılacak ve bu ünitede bu asenkron işlemler incelenecektir.
Asenkron (Async) İşlemler, Future ve Await
Mobil uygulamaların yazılım dilerinden biri olan Dart içerisinde ardışık program akışı esnasında ağ üzerinde veri akışı sağlandığı durumlarda kod satırının çalışması gecikebilmektedir. Böyle durumlarda diğer satırın işlenmesine gerek duyulduğunda asenkron gerçekleşebilecek program akışı için await anahtar kelimesiyle işlemin sonuçlanması beklenir.
Fonksiyon içerisinde await kullanılması durumunda fonksiyonun bir asenkron fonksiyon olduğu belirtilmeli ve fonksiyon tanımında async ifadesi kullanılmalıdır. Future ise asenkron işlemlerde await ile bekletilecek işlemi tanımlamak için kullanılmalıdır. Eğer bir metot başka bir metodun bitişine bağlı ise o zaman metotlar birbirine then ifadesi ile bağlanmaktadır. Kısaca özetlemek gerekirse;
metot1().then((değer) => metot2())
şeklinde verilen kod satırı metotlar arası asenkron ilişkide bağımlılığı tanımlayacaktır.
Flutter ile Sqlite İşlemleri
SQLite mobil uygulamalarda en çok tercih edilen veri tabanıdır. Bu veri tabanı Flutter uygulaması içerisinde doğrudan ulaşılabildiği gibi bağımsız veri tabanı da kullanılabilir.
Sqlite Kurulumu
SQlite ücretsiz açık kaynak kodlu ve konfigürasyon gerektirmeyen bir veri tabanıdır. Bu ünitede seçilen SQLite veri tabanı sqlflite olup indirilmesi ve kurulması için gerekli detaylar ünitede verilmiştir.
Kütüphane kurulduktan sonra kütüphanenin kullanılması için bu kütüphaneyi import etmek gerekmektedir.
Veri Tabanı Oluşturma
Veri tabanı asenkron olmalıdır. Burada yeni bir metot ve bu metot içerisinde bir nesneye ihtiyaç vardır. Bu nesnenin tipi Database olmalıdır. Gereken adımlar kitabınızda verilmiştir.
Bir veri tabanı nesnesi oluşturulduğunda gerekli tablolar onCreate metodundan yararlanılarak yaratılır ve onCreate
ile tanımlanmış tablolar Execute ile oluşturulur. Bu tablolara Insert komutu ile veriler eklemek mümkündür.
Tablo Oluşturma
Veri tabanının en önemli bileşeni tablolardır ve tablo “Create Table” ile yaratılır. Her tablonun birbirleriyle ilişkilendirilmesinde öznel bir anahtar tanımlanmalı ve bu da “PRIMARY KEY” ile sağlanmaktadır.
SQLite kısıtlı veri tiplerini desteklemektedir. Bunlar:
• INTEGER: Sadece tam sayıları • REAL: Ondalıklı sayılar • TEXT: Metin ifadeleri • BLOB: Binary
Kayıt Ekleme (Insert)
Veri tabanına kayıt ekleme için Insert kullanılır. Insert işlemi hangi tabloya veri ekleneceğini, o tabloya ait alan ismi ve verisi tanımlanarak kullanılır. Insert işlemi bir SQL sorgusu içerisinde olmalı ve bu sorgu da rawQuery metodu ile gerçekleştirilmektedir. Kitabınızda bunun detayları anlatılmıştır.
Kayıt Getirme (Select)
Veri tabanından veri getirme işi Select ile yapılır. Yine bu işlem için de SQL rawQuery metodu kullanılacaktır. Temelde her SQL veri tabanı yapısında olduğu gibi sorgulama:
Select * from TabloAdi where şart
Şeklinde olmakta ve veri tabanı programcılığında çok değişiklik olmamaktadır. Ancak teknolojiye bağlı döndürülen içerik tipinde farklıklar olacaktır. Flutterda kullanılan kayıt sorgulama, bir list nesnesi döndürecek be list nesnesinin formatı json olacaktır. Ayrıca kayıt sorgulama için query metodu da kullanılabilmektedir. Bu metotlarla yazılmış örneklere kitabınızdan bakabilirsiniz.
ListView
Mobil uygulamalarda aynı anda birden fazla kayıta ulaşılmak sıkça karşılaşılan bir gereksinimdir. SQLite, bu birden fazla kayıta ulaşmaya ListView ile olanak tanır. ListView kayıtların liste şeklinde istenildiği formatta görüntülemeye izin veren, kaydırma olayını destekleyen bir Widgettir. Veri tabanında yapılan sorgunun sonucu container, column, row gibi widgetları kullanılarak uygulamanın gerektirdiği şekilde görselleştirilmelidir.
Güncelleme-Update
Bir veri tabanı tablosunda elemanlarının değerleri hem yeni eklendiğinde hem de gerekli güncelleme zamanı değişir. Burada yine SQL sorgu ile güncelleme yapmak olasıdır. Update komutunu rowQuery metodu içinde kullanabileceğiniz gibi Flutter içerisinden de doğrudan Update komutunu kullanabilirsiniz. Veri tabanı programcılarının aşina olduğu komut satırı yine değişiklik göstermemekte ve şöyle tanımlanmaktadır:
Update TabloAdi set alan1=deger1, …, where şart
Silme-Delete
Silme işlemi için de diğer metotlarda olduğu gibi SQL sorgu veya direk yöntemden yararlanılabilmektedir. Bilinen formatı burada uygulamak yeterli:
Delete from TabloAdi where şart
Bu kod ister rawQuery ister veri tabanınının direk kendi metodu olarak kullanılabilir. Şartı taşıyan tablo verisi veri tabanından kaldırılır ve bir daha ulaşılmaz.
Modellerle Sqlite İşlemleri
Bir veri tabanı ile ilişki kurulduğunda programcının en büyük yardımcısı json olmaktadır. Eğer json formatına hakimseniz bu formattan modele veya modelden json formatına veriyi dönüştürmek son derece kolaydır.
Her tabloya ait model oluşturulmalı ve bu model de bir dart dosyası açılarak projeye eklenebilir. Yine kullanacağınız VSCode gibi bir IDE (Integrated Development Environment) yardımıyla Paste JSON as Code ile bunu yapmak son derece kolaydır ve bu tekniğin detaylı ayrıntılarını kitabınızda bulabilirsiniz.
Modeller, bir SQL komutu yazmadan güncelleme sorgulama gibi veri tabanı işlemleri yapılmasına olanak tanımaktadır.
Flutter ile API İşlemleri
API'ler, (Application Programming Interface) iki yazılım bileşeninin belirli tanımlar ve protokoller aracılığıyla birbiriyle iletişim kurmasına olanak tanıyan mekanizmalardır. Eğer bir sunucu API servis sağlıyorsa bir mobil uygulama vasıtasıyla bu servisi kullanmak son derece yararlı olacaktır.
API uygulama kullanıcılarının bildiği üzere http.get ve http.put bu API sunucularının sağladığı servislere ulaşmada kullanılan metotlar olup bunu Flutter ile kullanımı bu ünitede açıklanmıştır.
Bu kütüphaneyi kullanabilmek için kitapta detaylandırıldığı üzere gibi pub.dev deposunda bulunan http kütüphanesini uygulamanıza dahil etmeniz gerekiyor.
Kayıt Getirme (Get)
Bir API kullanarak API servisinin sağladığı veriye ulaşmak için o API servisinin URL’si gerekmektedir. Bu URL kullanılarak öncelikle servisin parse edilmesi gerekmektedir. Bu parse edilen servis URL’si kullanılarak http.get() metodu kullanılarak veriye ulaşılır ve bu veri bir değişkene atanır. Bu atama işleminin sonunda da dönüş kodunu sorgulamak gerekir. Eğer http dönüş kodu 200 görülürse işlemin başarıldığı anlamı çıkarılır ve gelen veri mobil uygulamada kullanılabilir. Bu sorgu sonucu elde edilen veri container, column, row gibi widgetları kullanılarak uygulamanın gerektirdiği şekilde görselleştirilmelidir. Kitabınızsa http.get kullanımına ait detaylı bir uygulama gösterilmiştir.
Kayıt Ekleme (Post)
Bir API programcısını aşina olduğu diğer bir komut ta http.post() komutudur. Bu komut ile API servisine veri göndererek bu verini kaydı sağlanmaktadır. Bu kayıt verisini gönderirken verinin hangi formatta gönderileceğinin de bildirilmesi gerekir. Günümüz teknolojisinde en çok kullanılan veri iletişim formatı JSON’dır.
Kayıt Güncelleme (PUT)
API ile güncelleme yapmak için http.put() metodu kullanılır. Ayrıca güncellenecek kaydın birincil anahtar olan alanı API adresinde belirtilir. Yine veri formatı olarak JSON kullanıldığı bir uygulama örneğini kitapta görmek mümkündür.
Kayıt Silme (Delete)
Silme işleminde http.delete() metodu kullanılır. http.delete() metoduna API adresi yukarıdaki gibi birincil anahtarı gönderilerek silme işlemi gerçekleştirilir.
http.delete() metoduma API url’si parametre olarak girilir ve sonucunda başarım/hata kodu elde edilir. Bu kod kullanılarak silme işleminin sonucu kontrol edilebilir.