"Enter"a basıp içeriğe geçin

Android Studio SqLite Veritabanına Veri Ekleme İşlemleri Yapıyoruz Ders #4

Merhabalar, önceki yazılarda oluşturduğumuz arayüz elemanlarından gelen verileri veritabanına kaydedeceğiz. Bir önceki yazıya gitmek için aşağıdaki bağlantıya tıklayabilirsiniz.

Android Nesne Tabanlı Programlamaya Uygun Veri Eklemek İçin Sınıf Yapma Ders #3

Kullandığımız arayüz elemanlarını Java içerisinde kullanmak için activity_main.xml dosyasında arayüz elemanlarına id tanımlamamız gerekiyor. Okunabilirlik ve anlaşılabilirliği arttırmak için id tanımlaması yaparken başına kısaltma olarak türünü belirten bir kısaltma ekliyoruz. Demek istediğim EditText için id tanımlarken et_ad olarak vereceğiz ki ne olduğu belli olsun.

Üstteki EditText için et_ad, alttaki için et_soyad verelim. Button nesnesine ise btn_kaydet verelim.

id kısımlarını değiştirerek diğer hepsine uygulayın. activity_main.xml dosyasının son hali ise şöyle:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical"
    android:padding="15dp" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Ad"/>

    <EditText
        android:id="@+id/et_ad"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPersonName"
        android:hint="Ad" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Soyad" />

    <EditText
        android:id="@+id/et_soyad"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPersonName"
        android:hint="Soyad" />

    <Button
        android:id="@+id/btn_kaydet"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Kaydet" />

</LinearLayout>

Butona onClick metodu ekleyeceğiz. Böylelikle hangi butona dokunulursa onun id değerini alacağız ve switch case yapısı ile istediğimiz işlemi yapabileceğiz.

<Button
    android:id="@+id/btn_kaydet"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Kaydet"
    android:onClick="butonaDokunuldu"/>

MainActivity.Java dosyasına gelelim. onCreate metodu dışarısında arayüz elemanları için değişken oluşturalım.

EditText et_ad, et_soyad;

onCreate metodu içerisinde Java karşılıklarını tanımlayalım.

et_ad = findViewById(R.id.et_ad);
et_soyad = findViewById(R.id.et_soyad);

Android Studio sürümünüz eski ise findViewById öncesi cast yapılmasını bekler bunun için (EditText) yazmak yeterli olur.

et_ad = (EditText) findViewById(R.id.et_ad);

onCreate dışarısına butonu kontrol etmek için bir tane metot oluşturacağız.

public void butonaDokunuldu(View view){
    
}

onClick yapısı ileride çoklu buton kullanıldığında kod karmaşasını engelleyecektir. onCreate içerisinde listener tanımlamak kod karmaşasına yol açacaktır. Bu yapı ile karmaşayı ortadan kaldırmış olacağız. Şimdi içerisine switch case yapısı oluşturalım. Parametre olarak id’yi alacak. view.getId bu işe yarıyor. case kısımlarında ise gelen id hangi butona karşılık geliyorsa onunla ilgili işlemler yapılacak, break ile metot çıkışı gerçekleşecek.

public void butonaDokunuldu(View view) {
    switch (view.getId()) {
        case R.id.btn_kaydet:

            break;
    }
}

R.id.btn_kaydet içerisine Veritabanına gönderilmek üzere değişkenler tanımlayalım.

public void butonaDokunuldu(View view) {
    switch (view.getId()) {
        case R.id.btn_kaydet:
            String ad = et_ad.getText().toString();
            String soyad = et_soyad.getText().toString();
            break;
    }
}

Tanımlamaların altına Kisiler ve Veritabani sınıfından nesne türetelim.

Kisiler kisiler = new Kisiler(ad ,soyad);

ad, soyad değişkenlerini kaydedeceğimiz için parametre olarak bu değerleri verdik.

Veritabani veritabani = new Veritabani(getApplicationContext());

Veritabani nesnesini de böylelikle oluşturmuş olduk. Sırada ise veritabanına kisiler’i gönderip kaydedeceğiz.

veritabani.KayitEkle(kisiler);

KayitEkle üstüne gelip Alt+Enter tuşlarına basın ve Create Method ‘KayitEkle’ sekmesine tıklayın. Otomatik olarak Veritabani.Java sınıfında bir metot oluşturacak.

public void KayitEkle(Kisiler kisiler) {

}

İçerisinde öncelikle veritabanını açmamız gerekiyor. getWritableDatabase seçtiğimizde hem okunabilir hem yazılabilir veritabanı açmış olacağız. getReadableDatabase ise sadece okunabilir veritabanı açıyor.

SQLiteDatabase db = getWritableDatabase();

Kayıt ekleme ve güncelleme işlemlerinde ContentValues sınıfından yararlanıyoruz.

ContentValues cv = new ContentValues();

cv.put ile ekleme işlemini yapacağız. ilk parametresi kolon ismi, ikinci parametre ise verilecek değerler. Bu verileri, gönderdiğimiz Kisiler sınıfından alıyoruz.

cv.put(ROW_AD, kisiler.getAd());
cv.put(ROW_SOYAD, kisiler.getSoyAd());

Verileri ekleyelim. İlk parametre tablo adı, ikincisine null, üçüncüsü ise ContentVaules nesnesi.

db.insert(AJANDA_TABLE, null, cv);

Veritabanı bağlantısını kapatalım.

db.close();

db.insert işlemi long türünden değer döndürür. Döndürdüğü değer eklenen satırın id’si oluyor. Bir hata olursa -1 değer döndürür. Hata kontrolü için bu değeri kullanalım.

long id = db.insert(AJANDA_TABLE, null, cv);

Metodu ise id değerini döndürmesi için void yerine long yazalım ve db.close(); altına return id; yazalım. KayıtEkle metodunun son durumu ise şöyle:

public long KayitEkle(Kisiler kisiler) {
    SQLiteDatabase db = getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put(ROW_AD, kisiler.getAd());
    cv.put(ROW_SOYAD, kisiler.getSoyAd());
    long id = db.insert(AJANDA_TABLE, null, cv);
    db.close();
    return id;
}

MainActivity.Java sınıfına geri dönelim. Hata tespiti için dönen değeri kullanalım. KayitEkle’yi long değişkene aktaralım.

long id = veritabani.KayitEkle(kisiler);

Bir koşul oluşturalım ve gelen değerin -1 olması durumunda hata mesajı gösterelim.

if (id == -1){
    Toast.makeText(this, "Kayıt İşleminde Bir Hata Oluştu.", Toast.LENGTH_SHORT).show();
}
else{
    Toast.makeText(this, "", Toast.LENGTH_SHORT).show();
}

Son olarak ise Kaydet butonuna tıklandığı zaman EditText alanlarını temizlesin.

et_ad.setText("");
et_soyad.setText("");

butonaDokunuldu son durum:

public void butonaDokunuldu(View view) {
    switch (view.getId()) {
        case R.id.btn_kaydet:
            String ad = et_ad.getText().toString();
            String soyad = et_soyad.getText().toString();

            Kisiler kisiler = new Kisiler(ad ,soyad);

            Veritabani veritabani = new Veritabani(getApplicationContext());
            long id = veritabani.KayitEkle(kisiler);
            if (id == -1){
                Toast.makeText(this, "Kayıt İşleminde Bir Hata Oluştu.", Toast.LENGTH_SHORT).show();
            }
            else{
                Toast.makeText(this, "Hata.", Toast.LENGTH_SHORT).show();
            }

            et_ad.setText("");
            et_soyad.setText("");
            break;
    }
Bir cevap yazın

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.