Anasayfa / Android Dersleri / Android Dersleri 13 : Veritabanı İşlemleri – 1

Android Dersleri 13 : Veritabanı İşlemleri – 1

Merhaba arkadaşlar. Hangi dili öğrenirseniz öğrenin, işin en zevkli kısmı veritabanı işlemleridir ve veritabanını öğrendikçe daha kaliteli uygulamalar yapmak istersiniz. Ben de bu derse, android üzerinde basit olarak sqlite ile veritabanı kullanımı konusunu anlatacağım.

Android Veritabanı İşlemleri ve SQLite Kullanımı

Android uygulamalarımızda veritabanı olarak genelde SQLite dediğimiz açık kaynak kodlu veritabanı kullanılır. Bu veritabanı, birçok programlama dili ile uyumludur. Android ile beraber kullanıldığında hızlı çalışır ve performansı yüksektir.

Şimdi zaman kaybetmeden bir proje oluşturalım ve sayfamızın görüntüsünü şu şekilde yapalım.

android veritabanı

Burada basit bir örnek oluşturmak için önce ad ve soyadı alacağız. Kaydet butonuna tıkladığımızda bunları veritabanına kaydedecek ve daha sonra Bilgileri Getir dediğimizde de alttaki Large Text alanlarına bunları getirecek.

Daha sonra src altındaki pakete sağ tıklayarak New-Class diyoruz ve yeni bir sınıf oluşturuyoruz. Bu sınıfımızı ben aşağıdaki isimle oluşturdum.

android veritabanı

 

Buradaki sınıfımızda, veritabanıyla ilgili işlemleri yapacağız. O yüzden oluşturduk. Sınıfımızı oluşturduktan sonra ben sınıfın içerisine temel şeyleri yazacağım ve daha sonra bunların ne anlama geldiklerini açıklayacağım.

android veritabanı

 

Burada ilk olarak sınıfımızı SQLiteOpenHelper sınıfından extend ettik yani türettik. SQLite veritabanını kullanabilmemiz için bu zorunludur. Daha sonra 2 adet değişken tanımladık. Birisi veritabanı adını tutacak diğeri de sürümünü. Bunları static ve final olarak tanımladık yani bir nevi sabit. Daha sonra bu Veritabani adlı sınıfımızın yapıcısını oluşturduk. Yapıcılar bildiğiniz gibi sınıf ismi ile aynı adı taşırlar. Bu yapıcı, Context tipinde bir c nesnesini parametre olarak aldı. c ismini rastgele verdim. Bu yapıcının içinde de super metodunu çağırdık ve parametre olarak; c nesnesi, veritabanının adını tutan değişken, null, veritabanı sürümü olarak 4 adet parametre verdik. Buraya kadar yaptıklarımız zorunlu.

Burada Veritabani adlı sınıfımızın altını çizdi. Yanındaki kırmızı çarpıya basıp Add Unimplement Method diyerek 2 adet metod ekliyoruz. Metodların eklenmiş hali aşağıdaki gibidir.

android veritabanı

 

Kalıtım yaptığımız için implement etmemiz gereken 2 tane metod verdi bize. Yani bu 2 metodu mutlaka kendi sınıfında kullanmalısın dedi. Bu metodlardan 1 numaralı olanda genelde veritabanı işlemleri oluşturulur. Burada yapılacak olan işlemler 1 defalığına yapılır. 2 numaralı metodda ise sürüm güncelleştirmelerinde yapılacak olanlar yazılır.

Bu alanlara aşağıdaki gibi kodları yazalım

android veritabanı

onCreate() metodunun içerisine, parametre olarak aldığı db nesnesinin execSQL() metodunu yazdık. Bu execSQL metodu, parametre olarak aldığı sorguyu çalıştırır. Biz sorgumuzda bilgiler adında bir tablo oluşturduk. Bu tablo da TEXT tipinde ad ve soyad sütunlarına sahip oldu. Android’de genelde TEXT,INT ve REAL veri tipleri kullanılır. onUpgrade() metodunda ise yine db.execSQL() metodunu kullandık ve parametre olarak bir sorgu yazdık. Bu sorgu, eğer öyle bir tablo varsa; onu sil demektir. Bir alt satırında da bu db nesnesini onCreate() metoduna gönderdik. Bunları yazmak zorunludur.

Bu işlemleri yaptıktan sonra şimdi MainActivity sınıfımızı açalım. İlk aşamada butonları, editview’ları bağlama işlemini yapalım. Bunları yaptıktan sonra görüntümüz şu şekilde olacaktır.

android veritabanı

1 numaralı alanda nesneleri tanımladık. 2 numaralı alanda, biraz önce oluşturduğumuz Veritabani adlı sınıftan v1 nesnesi oluşturduk. 3 numaralı alanda bu v1 nesnesinin new ile bellekte yer kaplamasını sağladık. 4 numaralı alanda nesneleri bağladık. 5 numaralı alanda ise Kaydet butonuna tıklandığında yapılacakları yazacağız. Şimdi bu sayfayı biraz daha dolduralım.

android veritabanı

Evet sınıfımızın içini yavaş yavaş dolduruyoruz. Burada veritabanı ile ilgili işlemleri yapacağız. 1 numaralı alanda, kaydetme butonuna tıklandığında yapılacakları yazacaktık. Bunları try içerisinde yaptık çünkü veritabanında hata olursa uygulama patlamasın hemen. Burada ekleme metoduna 2 parametre gönderdik. Bu parametreler, edittext’e girdiğimiz değerler. 2 numaralı alanda bağlantıyı kapattık. 3 numaralı alanda ekleme metodumuzu oluşturduk ve 2 parametre alıyor. 4. alanda v1 nesnesi üzerinden getWritableDatabase() metodunu çağırdık. Çünkü biz şuan ekleme yani bir yazma işlemi yapacağız. Bu işlemi de db nesnesine attık. 5 numaralı alanda zorunlu olarak ContentValues sınıfından bir nesne oluşturduk. 6 numaralı alanda bu nesnenin put() metodunu çağırarak ekleme yaptık. Peki hangi alanları ekledik? Parantez içinde ilk parametre nerede tutacağımızı gösterir. 2.parametre ise neyi tutacağız onu gösterir. Bu tutulacak olan değerleri, ekleme() metodunda parametre olarak almıştık zaten. Son 7 numaralı alanda da db’nin insertOrThrow() metodunu çağırdık. Bu metod veritabanına ekleme yapar. Son aşamadır. Bunun yerine insert() metodu da kullanılır fakat bu daha performanslıdır. İleride bazı örnekleri insert() ile yapacağım. İlk parametresi tablo adı, diğer parametre null, son parametre ise ContentValues nesnemizdir.

android veritabanı

Şimdi buradaki alanları açıklayalım. 1 numaralı alanda Göster butonu için listener yazıldı. 2 numaralı alanda, bu butona tıklandığında bilgileriGoster() metoduna gidilmesi sağlandı. 3. alanda hangi sütundaki verileri çekeceğimizi gösteren bir dizi şeklinde oluşturduk.

4.alanda yine bir db nesnesi oluşturduk fakat okuma yapacağımız için bu sefer getReadableDatabase() metodunu kullandık. 5.alanda bir Cursor nesnesi tanımladık. Cursor, veritabanından çekilen veriler arasında gezinmeyi sağlar. db nesnesinin query() metodunu çalıştırdık. Parametre olarak da ilk olarak tablo adı, daha sonra veritabanından okunacak alanı gösterdik. Kalan 5 null değeri sırasıyla ; where koşulu, where koşulunun değerleri, groupby, having, orderby’dır. Biz bunların belirlenmesini istemediğimiz için null belirledik. Bu arada bu dersi anlatırken SQL sorgularını bildiğinizi varsayıyorum. 6.alanda bu okunanlar adındaki Cursor nesnesi ile satır satır okuma yaptık. Bunun için while içerisinde moveToNext() metodunu kullandık.

7.alanda ise bu okunan değerleri add ve soyadd değişkenlerine attık. Değerleri alırken de sütun isimleri olan ad ve soyad parametrelerini verdik ki o sütundaki ilk verileri alsın. 8.alanda da bunları textview nesnelerine atarak ekrana yazdırdık.

 

Ekran Çıktıları

android veritabanı android veritabanı

Bu derste androidde veritabanı işlemlerine giriş yaptık. Temel olarak veritabanı,tablo oluşturmayı ve kayıt eklemeyi ve kayıtları çekmeyi anlattık. Diğer derslerde silme, güncelleme gibi işlemleri yapacağım ve farklı ekleme yöntemlerinden bahsedeceğim.

Mehmet Kirazlı

İstanbul Eyüp'te ikamet ediyorum. Giresun Alucra'lıyım. Bilgisayar Mühendisliği bölümünden 2013 yılında mezun oldum. "Yeni Başlayanlar için Java 8" kitabının yazarıyım. Şu anda özel bir firmada Mobil Yazılım Geliştirme Uzmanı olarak çalışıyorum.

İlginizi Çekebilir

Android Dersleri 29 : Telefon Rehberi Uygulaması Yapıyoruz

Merhaba. Yine uzunca bir aradan sonra yazmaya devam ediyorum. Bu yazımda,  veritabanında değinmediğim Where ifadesine yer …

56 Yorumlar

  1. Hocam merhaba…

    Emeğinize sağlık. Çok faydalı bir ders oldu.

  2. Şerif VATANSEVER

    Çok yararlı bir yazı dizisi.

  3. merabalar hocam dersleriniz çok yararlı oluyor bizim için çok teşekkür ederim.

    ama ben şöyle bir hata aldım yardımcı olabilirseniz çok sevinirim internette araştırdım ama sağlıklı bir sonuç bulamadım…

    "the source attachment does not contain the source for the file sqlitedatabase class" bunun için ne yapabilirim??

    saygılarımla..

  4. Unfortunetly Veritabani has stopped. diye uyarı alıyorum hocam kaydet butonuna bastığımda nereyi yanlış yapmış olabilirim hocam.

  5. esra özgümüş

    bende yukarıdaki gibi kaydet butona basınca veritabanı has stopped diye hata alıyorm uygulama kapanıyor araştırdım ama çözümü ile ilgili pek bişey bulamadım yardımcı olursanız çok sevinir oyaladı çözüm aramak baya

    • Hata alanlar için :

      cv1.put kısmında tırnak içerisindeki alanları “ad” ve “soyad” olarak düzeltin. Eğer yine hata alıyorsanız buton ve edittexleri bağlarken id’lerin uygun olup olmadığını kontrol edin

  6. Merhaba, andoroid telefondan uzaktaki bi database bağlanıp internet üzerinden , bu veritanında işlem yapmayı nasıl gerçekleştirebiliriz

  7. aynı hatayı bende alıyorum Unfortunetly Veritabani has stopped.
    şeklinde çözüm bulan var mı acaba.

  8. merhaba. Hocam internet üzerinden dataubase bağlanıp işlemler yapma ile ilgili bir örnek uygulama yayınlayacağını söylemşsin. Sitede bulamadım hocam size zahmet bu konuyla ilgli bir örnek uygulma yayınlarsanız çok makbule geçer

  9. aynen kaydet butonuna basınca Unfortunately veritabani1 has stoped hatası alıyorum.bunun nedeni ne olabilir hiçbir hata da göremiyorum hepsi tam gibi acaba emilatörden mi gercek cihaza atsam çalışırmı bi deneyejem.çözüm bulan varsa yazsın lütfen…

  10. ekleme() fonksiyonunun aldığı parametreleri ad,soyad olarak düzeltin ve fonksiyonun içerisinde de adi ve soyadi yerine ad ve soyad parametrelerini atayın

  11. Teşekkürler adım adım takip ederek , verilen hatayı görüp bırakmayarak hatanın kaynağını görüp , ufak düzeltmelerle 1 harfin çalışmamaya neden olmasını engelleyerke , sonunda çalıştırdım . Birde hocam android ve java derslerinde kitabınızı kullanıyoruz , isimden tanıyamadım k.bakmayın , kitabda isminizi görünce anladım. Güzel paylaşımlarınız için teşekkürler.

  12. İdris YAĞCI

    hocam gayet güzel anlatmışsınız.. lakin güncellemede sıkıntı var sanki.. şöyle ki kodlarımıd aşağıda veriorum.. Benim adisoyadi,eposta,mesaj diye 3 tane alanım var.. Bunların adisoyadi olan kısmı güncellenmiyor.. Neden olabilir.. zannedersem en son kısmındaki adisoyadi na göre güncelleme yaptıdığı için bunu id sine göre düzenlesek olur mu. orasını nasıl yaparım. id isimli bir sütunum daha var int değerli.. Teşekkürler..

    duzenle.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
    try {
    Guncelle(adisoyadi.getText().toString(),
    eposta.getText().toString(),mesaj.getText().toString());
    Toast.makeText(getApplicationContext(), “Güncellendi”,
    Toast.LENGTH_LONG).show();
    adisoyadi.setText(null);
    eposta.setText(null);
    mesaj.setText(null);
    } catch (Exception e) {
    Toast.makeText(getApplicationContext(), “Güncelleme Hatası n”+e,
    Toast.LENGTH_LONG).show();
    }

    }

    });

    }

    private void Guncelle(String adisoyadi, String eposta, String mesaj) {

    SQLiteDatabase db = v1.getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put(“adisoyadi”, adisoyadi);
    cv.put(“eposta”, eposta);
    cv.put(“mesaj”, mesaj);
    db.update(“veriler”, cv, “adisoyadi”+”=?”, new String[] { adisoyadi});
    db.close();
    }

  13. Hocam merhaba bende her şey tamamdır ama “Girilen ad” karşısındaki kutucukta “LargeText, “Girilen Soyad” yerine de kaydedilen isim geliyor.. Ben nerede hata yapmış olabilirim teşekkür ederim şimdiden..

  14. Hocam öncelikle teşekkür ederim.

    Uygulamayı çalıştırdığımda kayıt işlemi sorunsuz çalışıyor fakat görüntülemede nullpoint hatası alıyorum.Mainactivity ve tab2activity diye 2 farklı class kullanıyorum. Mainactivityden nesne türettim tab2 içinde. Onun aracılığı ile mainactivity de oluşturduğum değişkenlere erişim sağlıyorum. Okuma için kodlarım şu şekilde;

    SQLiteDatabase db=m1.v1.getReadableDatabase();
    Cursor okunanlar = db.query(“bilgiler”, sutunlar, null, null, null, null, null);
    while(okunanlar.moveToNext())
    {
    String add = okunanlar.getString(okunanlar.getColumnIndex(“ad”));
    String soyadd = okunanlar.getString(okunanlar.getColumnIndex(“soyad”));
    m1.ad1.setText(add);
    m1.ad2.setText(soyadd);
    }

  15. hocam uzaktan bir database bağlanmayı nasıl yapıcaz verileri oraya kaydedip çağırmam için

  16. çok iyi olur mehmet bey.Rica etsem aktif olarak kullandığınız e-mail adresinizi verirmisiniz

  17. hafız derslere ara verdin olmuyor böyle hafız

  18. unfortunately has stopped hatası alan arkadalar layout kodlarını dikkatlice incelesinler. EN güzeli Mehmet hocamın da dediği gibi debug edip satır satır kontrol etmek.

  19. hocam bu veriler nerede tutuluyor id ekledim ama birtürlü çekmedim

  20. Elinize Sağlık

  21. Merhaba, Mehmet Bey öncelikle paylaşımlarınız için çok teşekkür ederiz. Kod gayet stabil çalışıyor. ‘Unfortunately has stopped’ hatası alan arkadaşlar kodlarında sadece EditText değil de Spinner veya RadioButton kullanıyorsa tanımlamaları farklı yapılıyor. O yüzden add kısmında null gidiyor olabilir..

  22. Merhaba ,bir veritabanının dolu ya da boş olduğun nasıl anlarız

  23. Merhaba Hocam Verdiğiniz örnekteki kısmıları harfi harfine yapmama rağmen kaydet butonuna bastığım zaman hiç bir olay gerçekleşmiyor sebebi nedir acaba

  24. Merhaba hocam daha önce sorduğum sorunu hallettim şimdiki sadece meraktan bu kaydettiğim verileri nerede görebilirim 😀

  25. Sayın Hocam,

    Bu dersinizde tabloya kayıt eklemeyi ve okumayı çok iyi anlatmışsınız, sağolun. Fakat, tablodaki birden fazla kaydı listelemeyi de gösterebilirdiniz belki.

    Saygılarımla

  26. Merhabalar hocam yazınızdan faydalanarak android uygulamamda sqlite veritabanı bağlantısı yaptım fakat uygulamamı farklı her emülatorde açtığımda veritabanınını yeniden oluşturuyor yazdığınız gibi peki varolan veritabanını projeye nasıl ekleyebiliriz dosya yolunu kullanarak veritabanına nasıl kayıt yapabiliriz

  27. Hocam öncelikle bu güzel paylaşım için teşekkür ediyorum.
    Bende bazı arkadaşlarım gibi hata alıyorum. Programın tüm satırlarını debug ettim ve sorun veri tabanını kapattığımız noktada ( v1.close(); ) ortaya cıkıyor. Bunun hakkında yardımcı olursanız sevinirim.

  28. HOCAM GUNLERDIR ARAYIP DA BULDUGUM EN VERIMLI DERS. COKLU TABLO ORNEK CALISMALARINIZ VARSA DERS LINKI ALABILIR MIYIM? TUM DERSLERINIZE BAKACAGIM AMA SONUCTAN BASLAMAK BENI MOTIVE EDIYOR.

  29. Hocam merhaba. Ben android uygulama geliştirmek istiyorum ama bu bir web uygulaması olacak. Bu durumda veritabanı olarak sql lite mi kullanıcım .sunucu üzerinden mi bağlantı gerçekleşecek.yoksa web servis mi kullanılacak .Yardımcı olursanız çok sevinirim 🙂

    • Merhaba. Web uygulaması derken online çalışan bir uygulamaysa uzak sunucu kullanacaksınız. Web servis kullanırsanız daha hızlı ve sistematik kodunuz olur. Sqlite sadece lokal veritabanında bilgiler tutar. Sadece siz görürsünüz yani

  30. Kod hatasız çalışıyor, application has stopped hatası alıyorsanız, androidmanifest dosyasında hata olmadığından emin olun.

    • Android manisfest dosyasında ne gibi bir hata olabilir hiç dokunmadıkki. intent kavramıda yok..
      Bilgileri kaydederken sıkıntı yok. ancak göster deyince problem var. lütfen kodları yayınlar mısınız.

  31. göstermede veritabanı durdu hatası alıyorsanız…
    String add= okunanlar.getString(okunanlar.getColumnIndex(“ad”));

    yerine

    String add= okunanlar.getString(0);

    kullanmak sorunu çözüyor. column index -1 hatası yüzünden veritabanı durdu diyor..

  32. ekleme veya göster işleminin başarılı olduğunu göstermek için mesaj box ile
    ekle fonksiyonu çağırıldıktan sonra

    Dialog dialog = new Dialog(MainActivity.this);
    dialog.setTitle(“Ekleme İşlemi”);
    TextView tvSonuc = new TextView(MainActivity.this);
    tvSonuc.setText(“BAŞARILI”);
    dialog.setContentView(tvSonuc);
    dialog.show();

    kullanabilirsiniz.

  33. Allah razı olsun abim

  34. Yazdığınız Kodları indirebileceğimiz dökümanıda yazarmısınız.
    Tekrar resimlerden yazmak biraz zahmetli oluyor.

  35. isn’t responding hatası alıyorum neden olabilir teker teker harf harf herşeyi kontrol ettim lutfenyarım edin

  36. debug yaparak hatayı çözdüm gerek kalmadı sağolun

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir