Discover millions of ebooks, audiobooks, and so much more with a free trial

Only $11.99/month after trial. Cancel anytime.

Derinlemesine Android Data Programming
Derinlemesine Android Data Programming
Derinlemesine Android Data Programming
Ebook828 pages2 hours

Derinlemesine Android Data Programming

Rating: 0 out of 5 stars

()

Read preview

About this ebook

çalışan, veri işlemleriyle ilgili konular anlatılmaktadır. SQLite, SQL / Room ile veritabanı geliştirme; özkaynak
ve dosyalarla çalışma açıklanmaktadır. Uzaktaki bilgisayarlarla veri iletişimi için HTTP üzerinden REST / SOAP ile Web Service çağrımı & dosya alma / gönderme konuları anlatılmaktadır. Tüm veri işlemleri için gerekli Thread & Asynch konuları da kitabın kapsamındadır.

LanguageTürkçe
PublisherGodoro
Release dateJul 26, 2019
ISBN9786056952524
Derinlemesine Android Data Programming

Read more from Onder Teker

Related to Derinlemesine Android Data Programming

Related ebooks

Reviews for Derinlemesine Android Data Programming

Rating: 0 out of 5 stars
0 ratings

0 ratings0 reviews

What did you think?

Tap to rate

Review must be at least 10 words

    Book preview

    Derinlemesine Android Data Programming - Onder Teker

    Derinlemesine

    Android

    Data

    Programming

    SQL SQLite Room

    JSON REST XML SOAP

    Network Thread Socket Stream

    Service SMS Phone Receiver Sender

    Asset Preference Localization Permission

    Önder Teker

    Godoro Yayıncılık

    GODORO YAYINCILIK

    Yayıncı Sertifikası No: 18531

    Kitabın Adı:

    Derinlemesine Android Data Programming

    Copyright © 2019 Godoro Yayıncılık

    Kitabın Yazarı:

    Önder Teker

    Birinci Basım, Ağustos 2019, İstanbul

    ISBN:

    978-605-69525-2-4

    Kapak Tasarımı ve Mizanpaj:

    Önder Teker

    Baskı ve Ciltleme:

    NET COPY CENTER

    Özel Baskı Çözümleri

    İnönü Cd. Beytülmalcı Sk. No:23/A

    Gümüşsuyu, Taksim 34427 İstanbul TR.

    GODORO YAYINCILIK

    Çiğdem 2 Sokak No:7 D:8

    Kaptan H. Rıfat Çırak İş Merkezi Mecidiyeköy

    Şişli / İstanbul

    Telefon/Fax : (212) 213-0275

    http://www.godoro.com

    SQLite

    SQLite Üzerine

    SQL Veritabanı (SQL Database)

    Veritabanı (Database)

    Verilerin saklanmasını ve gerektiğinde yeniden erişilmesini sağlayan yazılımlara veritabanı (database) adı verilir. Bu yazılımların en yaygın türü ilişkisel veritabanı (relational database) diye adlandırılır. Bu tür veritabanları verileri çizelge (table) adlı yapılarda tutar. Burada ilişki sözcüğünün kullanılmasının nedeni, veritabanı düzeninde başlıca verilerin varlık (entity) adı verilen yapılarda saklanması ve bunların arasında ilişki (relation) tanımlayarak karmaşık verilerin modellenebilmesidir.

    Çizelge (Table)

    Veritabanlarında çizelge (table) yapısı dikeç (column) ve yataç (row) olarak düşünülür. Burada dikeç, tablonun aynı türdeki verilerinden oluşan sütunudur. Öte yandan yataç ise her bir kaydı simgeleyen satırdır. Örneğin ürün diye bir çizelge varsa bundan bir ürün kimliği, ürün adı ve satış ederi biçiminde üç dikeç bulunur. Satır ise eklenen her bir ürün anlamında gelir. Buna göre yeni bir ürün eklemek, yeni bir satır eklemek demektir. Bir satırın bir sütundaki değeri, yani bir dikeçle ile yataçın kesiştiği yere genellikle tarla (field) adı verilir. Her dikeç için bir tür (type) belirlenir. Örneğin ürün kimliği, bütün (integer); ürün adı, yazı (text) ve satış ederi de gerçek (real) türündedir. Bir yataçtaki bir tarla, ilgili dikecin tür (type) bilgisine uymalıdır. Örneğin satış ederi sütunu gerçek sayı olarak bildirildiyse oraya harf girilmez.

    SQL

    İlişkisel veritabanlarında verileri yazmak için SQL adı verilen dil kullanılır. Çok karmaşık olmayan bu dilde yazma ve okuma işlemlerine ilişkin bir çok buyruk (command) bulunur. Bunlardan insert (sokma), bir satır ekleme; update (güncelle), bir satırın içeriğini değiştirme; delete (sil) ise bir satırı giderme anlamına gelir. Verileri almak için select (seç) buyruğu kullanılır. Herhangi bir ölçüt bildirilmezse çizelgedeki tüm kayıtlar gelir. Ancak koşul vermek için where (şurada) biçiminde bir açarsöz bulunmaktadır. Bir tablo oluşturmak için create (yarat), tablonun yapısını değiştirmek için alter (almaştır) ve yok etmek için de drop (düşür) biçiminde buyruklar bulunmaktadır.

    SQLite

    İlişkisel veritabanları arasında gelişmiş bir çok ürün sayılabilir. Ancak bunların çoğu, çok özkaynak tüketmekte ve daha çok işgörücü (server) adı verilen düzeneklerde kullanılmaktadır. Bu nedenle Android gibi bilgisayarlara göre daha az gücü olan aygıtlarda kullanılmaları olanaklı değildir. Bu nedenle çok ince, az yer harcayan SQLite adlı, açık kaynaklı ürün kullanılmaktadır. Bu ürün Android aygıtlarında herhangi bir kurulum yapmadan, hazır durumda bulunmaktadır.

    İçerik Sağlayıcı (Content Provider)

    Android işletim düzeninde tutulan veriler ya dosya (file) ya da SQLite üzerinde saklanmaktadır. Ancak değmeler (contacts) , gündizme (calendar), telefon (phone) gibi uygulamalar ve altyapıların verileri de SQLite ile saklanmaktadır. Bunlar, olağan SQLite yapısıyla erişilebilse de veritabanlarının adının ne olduğu, nerede oldukları, tabloları adının ne olduğu gibi bilgilere erişmek için kimi özel işlemler yapılmalıdır. İşletim düzeninde kullanıcıyla ilgilere verilere erişim sağlayan yapılara içerik sağlayıcı (content provider) adı verilmektedir.

    Room Direme Betikliği (Room Persistence Library)

    SQLite veritabanını doğrudan kullanmak yerine, SQL dilini kullanmadan, doğrudan Java nesneleriyle yazma ve okuma yapılmasını sağlayan Room Direme Betikliği (Room Persistence Library) adlı bir betiklik bulunmaktadır. Bununla, açımlama (annotation) kullanarak nesneleri direyen (persistent) duruma olanaklıdır. Özellikle başka çevrelerde ORM konularını bilenler ve SQL ile uğraşmak istemeyenler için iyi bir almaşık oluşturabilir. Öte yandan SQL dili, yazımı uzun olsa da, çok yaygın bilinmekte; buna karşın Room betikliğinde de kendine özgü konularını öğrenme zorunluğu ortaya çıkmaktadır.

    Sınıflar Üzerine

    SQLiteDatabase

    SQLite ile ilgili en temel sınıf SQLiteDatabase (SQLite Veritabanı) sınıfıdır. Belli bir veritabanına yazma ve okumayla ilgili tüm işlemler bu sınıfla yapılır. İki tür yöntem içerdiği söylenebilir. Bunlardan bir tanesi olağan SQL dili ile yapılanlardır. Ancak bunun dışında, hiç SQL yazmadan temel işlemleri yapabilmek için yöntemler de bulunmaktadır.

    SQLiteDatabase sınıfını kullanarak; yaratma (create) veya almaştırma (alter) türündeki işlemlerde execSQL() (SQL yürüt) yöntemi kullanılabilir. Buna karşın seçme (select) gibi okuma türü işlemlerde de rawQuery() (çiğ sorgu) yöntemi kullanılır. Öte yandan, sok (insert), güncelleme (update) ve silme (delete) gibi yazma işlemlerinde sonuç beklenmiyorsa execSQL(), bekleniyorsa rawQuery() yöntemleri kullanılabilir.

    SQLiteDatabase sınıfında, SQL kullanmadan temel işlemleri yürütmek için yöntemler bulunmaktadır. Örneğin insert() (sok) ve update() (güncelle) yöntemleri, tablonun adı ve işlem yapılacak verileri alarak doğrudan yazma işlemini gerçekleştirebilir. Benzerlikle, delete() (sil) yöntemi de tablonun adını ve silinecek satırının birincil açarını alarak giderme yapabilir. Olağan durumda select() (seç) yöntemiyle yapılan işlemleri query() (sorgula) adlı yöntemle yaparak, sonuçları almak olanaklıdır.

    SQLiteDatabase sınıfındaki yöntemler çok sayıda yüklendirme (overload) içermezler. Genelde tek bir yöntem yapılmıştır. Bu durumda kullanımı gerekmeyen değiştirgenlere null (yok) değeri vermek gerekmektedir.

    SQLiteOpenHelper

    SQLiteDatabase nesnesiyle çalışırken veritabanının daha önce yaratılmış olup olmadığı, üzerinde bir değişiklik yapılıp yapılmayacağı gibi konular önemli duruma gelmektedir. Çünkü bir taşınabilir aygıt (mobile device), bir işgörücü düzenek (server machine) gibi geliştiricinin elinde olan bir aygıt değildir. Dolayısıyla veritabanının aygıtta yüklü biçimine bakmak olanaklı değildir. Başka bir deyişle veritabanının tutulduğu konum (location) belli değildir.

    Bir başka sorun da sürüm (version) konusundadır. Aygıtlara daha önceki sürümler aynı zamanda yüklenmemiş olabilir. Örneğin iki aygıt 1. sürümü indirdikten sona ikinci aygıt 2. sürümü yüklemiş ikincisi yüklememiş olabilir. Bu durumda 3. sürüm yüklendiğinde birinci aygıt için iki sürüm atlatmak gerekirken ikinci aygıt için yalnızca bir sürüm atlatmak yeterli olur.

    Yukarıda anlatılan sorunlara çözüm üretmek için SQLiteOpenHelper (SQLite Açma Yardımcısı) adlı bir sınıf yapılmıştır. Bu sınıf, veritabanına bir ad (name) verilince kendiliğinden yaratılır. Her yaratılışta da bir sürüm (version) verir. Sürüm ilk kez yüklendiğinde onCreate() (yaratmada) biçimindeki bir yöntem çağrılır. Ancak sürüm değişince onUpgrade() (güncellemede) adlı yöntem çağrılır. Bu yönteme, şu anda aygıtta yüklü olan eski sürüm (old version) ve şu anda uygulamanın yüklediği yeni sürüm (new version) verilir. Bu biçimde kaçıncı sürümden kaçıncıya geçildiği bilinir ve ona göre veritabanı değişiklikleri yapılır.

    Açma yardımcısı sınıfının onCreate() (yaratmada) yönteminde SQL dilindeki create table (çizelge yarat) buyruğu kullanılır. Öte yandan onUpgrade() (yükseltmede) yönteminde alter (almaştır) buyruğu çalıştırılır. İkinci yöntem için bir başka yol da önce drop table (tablo düşür) ile eski tabloyu silmek ve yeniden create (yarat) buyruğunu çağırmak olabilir. Ancak bu durumda kullanıcının tüm verisi silinir, her şeye sıfırdan başlamak durumunda kalır.

    ContentValues (İçerik Değerleri)

    Veritabanına sokma (insert) ve güncelleme (update) yapmak için değerlerin verilmesi gerekir. ContentValues (İçerik Değerleri) nesnesi, verilecek değerleri tutar. Hiç SQL yazmadan, insert() (sok) ve update() (güncelle) biçimindeki yöntemler bu sınıf türünde nesneler alır ve yazma işlemini gerçekleştirir.

    Cursor (İmleç)

    Veritabanından seçme (select) buyruğuyla sonuçlar alındığında, dönen veri bir dizi ya da dizelge gibi elde edilmez. Gerçekte tüm veriler dönmez. Onun yerine, sonuçları almak için kullanılabilecek Cursor (İmleç) türünde bir nesne döner. Sonuçlar bu nesneden birer birer alınır. Çoğu kez veriler istendikçe diskten getirilir. Başka bir deyişle, dönen sonuçları içermek için değil, sonuçlara erişmek için kullanılan bir nesnedir.

    SimpleCursorAdapter

    Veritabanından Cursor ile alınan verileri ListView (Dizelge Görünümü) ya da GridView (Izgara Görünümü) gibi bileşenlerde göstermek için SimpleCursorAdapter (Yalın İmleç Bağdaştırıcı) adlı sınıf kullanılabilir. Bu sınıfın yaptığı görsel bileşenlerle veritabanı arasında köprü kurmaktır. Doğallıkla, geliştirici bunun yerine kendi bağdaştırıcı sınıfını da yazabilir.

    Temel İşlemler

    Veritabanı (Database)

    Bir veritabanı ile çalışmak için öncelikle SQLiteOpenHelper (SQLite Açma Yardımcısı) sınıfından türeyen bir alt sınıf yapılır. Bu sınıfa bir yapılayıcı (constructor) eklenir ve soyut (abstract) yöntemler için ezme (override) yapılır.

    Yapıcı (Constructor)

    Türeyen sınıfın yapıcı (constructor) biriminde Context (Bağlam) nesnesi alınarak super (üst) yöntemiyle taban sınıfa iletilir. Üst sınıfının kurucusunu çağırırken veritabanı için bir ad (name) ve sürüm (version) verilir. Üst sınıf bir de CursorFactory (İmleç Üretimliği) nesnesi istese de null (yok) verilerek geçilebilir.

    Örneğin

    public class OurSqlHelper extends SQLiteOpenHelper {

      public OurSqlHelper(Context context) {

    super(context, "ourdb", null, 1);

      }

    }

    biçimindeki çağrı, ourdb (veritabanımız) adında bir veritabanı oluşturur ve sürüm sayısı olarak 1 verir.

    SQLiteOpenHelper sınıfı soyuttur ve onCreate() (yaratmada) ve onUpdate() (güncellemede) adlı yöntemler için ezme (override) yapılması gerekir. İlkinde tablolar yaratılmalı ikincisinde tablolar değiştirilmeli, silinmeli ya da eklenmelidir. Bu iki yönteme de SQLiteDatabase (SQLite Veritabanı) nesnesi değiştirgen olarak verilir.

    Açma (Open)

    Bir veritabanıyla çalışılabilmesi için öncelikle açılması gerekir. İki biçimde açmak olanaklıdır: okunabilir (readable) ve yazılabilir (writable). Bir veritabanı okunabilir olarak açıldıysa üzerinde sokma (insert), güncelleme (update) ve silme (delete) gibi işlemler yapılmaz. Bunlar yapılmak isteniyorsa okunabilir olarak açılmalıdır.

    Örneğin SQLiteOpenHelper sınıfındaki getWritableDatabase() (yazılabilir veritabanını edin) yöntemiyle yazılabilir durumda açma yapılabilir:

    SQLiteDatabase database = helper.getWritableDatabase();

    Yalnızca okuma yapılacaksa getReadableDatabase() (okunabilir veritabanını edin) yöntemi kullanılır:

    SQLiteDatabase database = helper.getReadableDatabase();

    Veritabanını açma işlemleri etkinlik (activity) gibi sınıfların onCreate() (yaratmada) yönteminde yapılmalıdır.

    Kapatma (Close)

    Bir veritabanında işlemler yapıldıktan sonra kapatılmalıdır. Bunun için SQLiteOpenHelper sınıfındaki close() (kapat) yöntemi kullanılabilir:

    helper.close();

    Söz konusu yöntem etkinlik (activity) gibi sınıfların onDestroy() (yok etmede) yönteminde çağrılmalıdır.

    OnCreate() (Yaratmada)

    Açma yardımcısı sınıfının onCreate() (yaratmada) yönteminde SQL dilindeki create table (çizelge yarat) buyruğuyla tablo yaratılabilir. Örneğin

    @Override

    public void onCreate(SQLiteDatabase database) {

      String create="create table ourtable( "

          +" _id integer primary key autoincrement, "

          +" ourname varchar(50) not null,"

          +" ourvalue float)";

      database.execSQL(create);

    }

    biçimindeki sorguda ourtable (çizelgemiz) adlı bir tablo, _id (kimlik), ourname (adım) ve ourvalue (değerim) adlı sütunlarla yaratılmaktadır. Kimlik alanı olarak ourid (kimliğim) gibi bir ad verilebilse de Android işletim düzeninde _id özel bir anlama sahiptir ve bir çok yerde işlemleri kolaylaştırır.

    OnUpgrate() (Yükseltmede)

    Açma yardımcısı sınıfının onUpgrade() (yükseltmede) yönteminde alter table (çizelge almaştır) buyruğuyla var olan tablolarda değişiklik yapılabilir. Ancak sınama aşamasında drop table (çizelgeyi düşür) buyruğu çağrıldıktan sonra tabloların yaratılması için onCreate() (yaratmada) yöntemi çağrılabilir. Örneğin

    @Override

    public void onUpgrade(

    SQLiteDatabase database,

        int oldVersion, int newVersion)

    {

      String drop="drop table if exists ourtable";

      database.execSQL(drop);

    onCreate(database);

    }

    biçimindeki düzgüde ourtable adlı çizelge düşürülmektedir.

    Yükseltme yöntemi ilk aşamada çalışmaz. Yapıcıda sürüm sayısı (version number) olduğu sürece onUpgrare() yöntemi, herhangi bir değişiklik gerekmediği için çağrılmaz. Ancak yapıcı

    public OurSqlHelper(Context context) {

      super(context, "ourdb", null, 2);

    }

    biçiminde değiştirilirse yükseltme yöntemi çağrılır.

    Gerçekçi bir uygulamada onUpgrate() yönteminde aşağıdaki gibi, sürüm sayılarına göre bir takım işlemler yapılması gerekir:

    if (oldVersion == 5 && newVersion == 7 ){

      // 5. sürümden 7. sürüme geçişin gerekli buyruklar

    }

    Yazma İşlemleri

    Aşağıda, SQL kullanmadan sokma (insert), güncelle (update) ve sil (delete) işlemleri anlatılmaktadır.

    Sokma (Insert)

    Bir tabloya satır eklemek için insert() (sok) yöntemi kullanılabilir. Sokulacak değerler öncelikle ContentValues (İçerik Değerleri) sınıfına eklenir ve değiştirgen olarak yönteme iletilir. Örneğin

    ContentValues values = new ContentValues();

    values.put("ourname,Adım");

    values.put("ourvalue",12.34);

    long id=database.insert("ourtable", null, values);

    Burada ourtable adlı tablonun ourname ve ourvalue adlı sütunlarına değer verilerek sokma yapılmaktadır. Veritabanı nesnesindeki insert() yöntemi dikeç kimliği (row id) değeri döndürür.

    Güncelleme (Update)

    Var olan bir satırı değiştirmek için update() (güncelle) yöntemi kullanılabilir. Bu yönteme ContentValues (İçerik Değerleri) nesnesiyle yeni değerler verilir. Güncellenecek satırın dikeç kimliği (row id) değeri _id (kimlik) adıyla bildirilir. Örneğin

    ContentValues values = new ContentValues();

    values.put("ourname,Yeni Adım");

    values.put("ourvalue",43.21);

    database.update("ourtable", values, "_id=" + 1,null);

    Burada, güncellenecek satırın kimliğinin değerinin 1 olduğu varsayılmaktadır.

    Silme (Delete)

    Bir satırı gidermek için delete() (sil) yöntemi kullanılır. Bu yönteme değiştirgen olarak _id (kimlik) adıyla silinecek satırın kimlik değeri verilir. Örneğin

    database.delete("ourtable", "_id=" + 1, null);

    biçimindeki düzgü, kimliği 1 olan satırı siler.

    Okuma İşlemleri

    Aşağıda, SQL kullanmadan sokma (insert), güncelle (update) ve sil (delete) işlemleri anlatılmaktadır. Veritabanından değerleri okumak için query() (sorgula) yöntemi kullanılmaktadır. Sonuçlar Cursor (İmleç) nesnesi olarak döner.

    Çok Sonuçlu Sorgu

    Veritabanındaki query() (sorgula) yöntemine tablonun adı ve döndürülecek sütunların adlarını bildirerek sorgulama yapılır. Örneğin

    String[] columns={"_id,ourname,ourvalue"};

    Cursor cursor=database.query(

        "ourtable", columns, null, null, null,null, null);

    biçimindeki sorgu ourtable adlı çizelgedeki tüm satırları Cursor nesnesi olarak getirir. Verilere tek tek erişmek için aşağıdaki gibi bir düzgü yapılabilir:

    while(cursor.moveToNext()){

      long id=cursor.getLong(0);

      String ourname=cursor.getString(1); 

      double ourvalue==cursor.getDouble(2);

    }

    Burada moveToNext() (sonrakine taşın) yöntemi her çağrılışında sonraki satıra geçer. Daha kayıt varsa true (doğru), yoksa false (yanlış) döndürür. O durumda while (sürece) döngüsünden çıkılmış olur.

    İmleç nesnesindeki yöntemlerden getLong() (uzunu edin), getString() (sicimi edin) ve getDouble() (ikişeri edin) yöntemleri sıfır tabanlı (zero-based) olarak sütunların dizin (index) değeri verilen sütunun değerlerini döndürür.

    Sütunlara, adıyla erişim için yöntem yoktur. Ancak dikeç dizini (column index) yerine dikeç adı (column name) verilmek istenirse getColumnName() (dikeç adını edin) yöntemi kullanılabilir. Örnek:

    String ourname=cursor.getString(

        cursor.getColumnIndex( "ourname" ) ); 

    Burada yapılan, dikecin adıyla dizinini bulmak ve değeri bu dizinle elde etmektir. Eğer sütun adı yanlış yazıldığında bir kuraldışılık (exception) fırlatılması isteniyorsa getColumnIndexOrThrow() (dikeç dizinini al ya da fırlat) yöntemi aşağıdaki gibi

    String ourname=cursor.getString(

        cursor.getColumnIndexOrThrow ( ourname ) ); 

    Tekli Sonuçlu Sorgu

    Bir sorgunun sonucunda tek bir kayıt dönecekse, örneğin belli bir kimlik (id) değerine sahip bir kayıt döndürülecekse yine query() (sorgula) yöntemi, bu kez _id (kimlik) adıyla değer verilerek kullanılır. Örneğin

    long id=123;

    String[] columns={_id,ourname,ourvalue};

    Cursor cursor=database.query("ourtable",

    columns, "_id=" + id, null, null,null, null);

    biçimindeki sorgulama ourtable adlı tablodaki _id değeri 123 olan satırın columns ile bildirilen sütunlarını getirir.

    Koşula uyan bir kayıt yoksa Cursor (İmleç) nesnesi null (yok) olarak gelir. Buna karşın kayıt olsa da imleç o kaydı göstermez. O yüzden moveToNext() (sonrakine taşın) yöntemiyle ilk satıra gelinmelidir. Başka bir deyişle

    if (cursor != null) {

      cursor.moveToFirst();

    }

    biçimindeki düzgü sonrasında imleç kullanılabilir duruma gelir. Sonrasında değerler olağan biçimde alınır:

    String ourname=cursor.getString(1); 

    double ourvalue==cursor.getDouble(2)

    Bağdaştırıcı (Adapter)

    Veritabanından alınan sonuçlara erişmek için kullanılan Cursor sınıfının ListView (Dizelge Görünümü) ve GridView (Izgara Görünümü) gibi bileşenlerde kullanmak için SimpleCursorAdapter (Yalın İmleç Bağdaştırıcı) sınıfı kullanılır. Bu bileşenin öteki bağdaştırıcılardan ayrılığı, verileri dizi ya da dizelge gibi bir veri yapısından değil Cursor nesnesinden almasıdır. Bunun dışındaki kullanımı aynıdır. Örneğin

    String[] from={

      "_id,ourname,ourvalue"};

    int[] to={

    R.id.ourIdView,R.id.ournameView,R.id.ourvalueView};

    SimpleCursorAdapter adapter = new SimpleCursorAdapter(

      this,R.layout.our_row, cursor, from, to);

    Burada from (şundan) dizisi gösterilecek sütunların adlarıdır. Öte yandan, to (şuna) dizisi değerleri gösterecek bileşenlerin kimlikleridir. Koddaki our_row ise satırın nasıl gösterileceğini bildiren serim (layout) dosyasının adıdır.

    SQLite Uygulaması

    Aşağıda SQLite veritabanın bir tablonun sokma (insert), güncelleme (update), silme (delete) ve seçme (select) işlemlerini gösteren bir örnek anlatılmaktadır. Veritabanı işlemleri dışında tüm kayıtları bir ListView (Dizelge Görünümü) olarak gösteren bir özet etkinliği ve her bir kaydın eklenmesini ve güncellenmesini sağlayan bir ayrıntı etkinliği bulunmaktadır. Önceki bölümlerde bir veritabanı oluşturulması ve ona erişilmesiyle ilgili işlemler anlatılmaktadır. Sonraki bölümlerde kullanıcıyla etkileşim kuran sınıflar anlatılmaktadır.

    SQLiteOpenHelper

    SQLiteOpenHelper (SQLite Açma Yardımcısı) sınıfını uzatan InventorySqlHelper (Sayımca SQL Yardımcı) adlı bir sınıf yazalım:

    public class InventorySqlHelper extends SQLiteOpenHelper {

      public InventorySqlHelper(Context context) {

        super(context, "inventory", null, 1);

      }

      @Override

      public void onCreate(SQLiteDatabase database) {

        String create="create table product( " +

          " _id integer primary key autoincrement, " +

          " productName varchar(50) not null," +

          " salesPrice float)";

        database.execSQL(create);

      }

      @Override

      public void onUpgrade(SQLiteDatabase database,

          int oldVersion, int newVersion)

      {

        String drop=drop table if exists product;

        database.execSQL(drop);

    onCreate(database);

      }

    }

    Yukarıdaki sınıfta inventory (sayımca) adlı bir veritabanı 1 sayılı sürümle yaratılmıştır. Sınıfın onCreate() (yaratmada yönteminde) product (ürün) adlı bir çizelge create table (çizelge yarat) yöntemiyle oluşturulmaktadır. Sınıftaki onUpgrade() (yükseltmede) yönteminde ise yaratılan tablo düşürülüp yeniden yaratılması için onCreate() yöntemi çağrılmaktadır. Gerçek bir uygulamadan oldVersion (eski sürüm) ve newVersion (yeni sürüm) değerlerine bakarak tablolarda değişiklikler yapılmalıdır. Genelde alter table (çizelge almaştır) buyruğu kullanılır. Her iki yöntemde de SQL buyrukları execSQL() (SQL yürüt) yöntemiyle çağrılmaktadır.

    Depo (Repository)

    Veritabanına okuma ve yazma işlemleri yapan InventoryProductRepository (Sayımca Ürün Deposu) adlı bir sınıf yapalım:

    public class InventoryProductRepository

    Enjoying the preview?
    Page 1 of 1