• Şuradasınız
  • Anasayfa
  • Android
  • Android Dersleri 13 : Veritabanı İşlemleri – 1

Android Dersleri 13 : Veritabanı İşlemleri – 1

Merhaba arkadaşlar. Bu derste, android uygulamalarında kullanılan temel araçları inceledikten sonra bize en çok lazım olan kısma geçiş yapıyoruz. 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 veritabanı nasıl kullanılır onu anlatacağı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.

1

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.

2

 

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.

3

 

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.

4

 

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

11

 

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.

7

 

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.

811

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.

222

 

Ş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.

 

Uygulamamızın ekran çıktısı ise şu şekilde olacaktır.

ekran1 ekran2

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.

Benzer Yazılar

Yorumlar

  • Sabri , 28 Nisan 2013 - 16:42

    Hocam merhaba…

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

    Cevapla
  • Şerif VATANSEVER , 29 Nisan 2013 - 16:36

    Çok yararlı bir yazı dizisi.

    Cevapla
  • Yusuf Ziya , 02 Temmuz 2013 - 07:03

    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..

    Cevapla
  • Ercan Er , 16 Temmuz 2013 - 13:23

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

    Cevapla
  • esra özgümüş , 05 Ağustos 2013 - 14:30

    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

    Cevapla
    • Mehmet Kirazlı , 05 Ağustos 2013 - 17:17

      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

      Cevapla
  • Tuğba , 14 Ağustos 2013 - 10:56

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

    Cevapla
  • ibrahim , 29 Ağustos 2013 - 22:59

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

    Cevapla
  • orhan , 06 Kasım 2013 - 15:39

    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

    Cevapla
  • YİGİT , 12 Kasım 2013 - 09:57

    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…

    Cevapla
  • Mehmet Kirazlı , 12 Kasım 2013 - 11:15

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

    Cevapla
  • Semih Morada , 23 Aralık 2013 - 22:46

    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.

    Cevapla
  • İdris YAĞCI , 30 Ocak 2014 - 12:00

    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();
    }

    Cevapla
  • fatih , 08 Şubat 2014 - 16:52

    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..

    Cevapla
  • mert , 18 Mart 2014 - 16:05

    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);
    }

    Cevapla
  • mehmet üzüm , 27 Mart 2014 - 21:03

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

    Cevapla
  • mehmet üzüm , 31 Mart 2014 - 15:28

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

    Cevapla
  • AJ..AJ..AJEY , 22 Nisan 2014 - 11:58

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

    Cevapla
  • Asım Ölmez , 03 Mayıs 2014 - 16:16

    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.

    Cevapla
  • Fatih , 20 Mayıs 2014 - 23:05

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

    Cevapla
  • Caner , 26 Ağustos 2014 - 13:34

    Elinize Sağlık

    Cevapla
  • Hasan , 15 Ekim 2014 - 13:57

    Teşekkürler 🙂

    Cevapla
  • Tuba , 18 Kasım 2014 - 19:20

    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..

    Cevapla
  • ali , 22 Şubat 2015 - 23:17

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

    Cevapla
  • Serhan Yılmazs , 07 Mart 2015 - 16:09

    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

    Cevapla
  • Serhan Yılmaz , 07 Mart 2015 - 16:22

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

    Cevapla
  • FSMVÜ , 16 Temmuz 2015 - 19:33

    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

    Cevapla
  • berre , 11 Eylül 2015 - 17:06

    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

    Cevapla
  • onur , 23 Kasım 2015 - 07:23

    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.

    Cevapla
  • MEHMET AKİF KABAKCI , 31 Mart 2016 - 02:08

    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.

    Cevapla
  • Sevda , 11 Mayıs 2016 - 22:48

    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 🙂

    Cevapla
    • Mehmet Kirazlı , 25 Mayıs 2016 - 23:38

      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

      Cevapla
  • Berke , 13 Mayıs 2016 - 16:40

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

    Cevapla
    • ali , 30 Eylül 2016 - 14:18

      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.

      Cevapla
  • ali , 30 Eylül 2016 - 14:32

    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..

    Cevapla
  • ali , 30 Eylül 2016 - 14:34

    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.

    Cevapla
  • Berk , 16 Ekim 2016 - 21:42

    Allah razı olsun abim

    Cevapla
  • Atakan , 09 Şubat 2017 - 16:53

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

    Cevapla

Yorum Yazın

Su elementleri kullanabilirsiniz : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Arama
RSS
Beni yukari isinla