Android uygulamalarında veritabanı işlemleri gerçekleştirmek genellikle farklı aktiviteler arasında yönlendirme yapmayı gerektirir. Bu makalede, bir Android uygulamasında temel veritabanı işlemlerini gerçekleştirmek için gerekli olan aktiviteleri oluşturmayı ele alacağız.
İlk adım olarak, projemize temel aktiviteleri eklemek için Android Studio’daki kolay araçları kullanacağız. activity_main, activity_ekle, activity_sil ve activity_listele aktivitelerini projemize sağ tıklayarak oluşturacağız. Bu aktiviteler, uygulamanın ana ekranını, yeni öğe ekleme ekranını, öğe silme ekranını ve mevcut öğeleri listeleme ekranını temsil edecek.
Main Aktivite İşlemleri
Diğer aktiviteleri açacak butonların tasarımlarını oluşturup java kodlarını yazıyoruz.
activity_main.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | <?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:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="50dp" android:orientation="vertical" tools:context=".MainActivity"> <TextView android:id="@+id/textView" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="VERİ TABANI İŞLEMLERİ" android:textSize="24sp" /> <Button android:id="@+id/buttonEkle" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="EKLE" /> <Button android:id="@+id/buttonSil" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="SİL" /> <Button android:id="@+id/buttonGuncelle" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="GÜNCELLE" /> <Button android:id="@+id/buttonListele" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="LİSTELE" /> </LinearLayout> |
LinearLayout: Bu bileşen, diğer arayüz öğelerini dikey bir düzende tutar. Dikey düzen, öğelerin üstten alta doğru sıralanmasını sağlar.
TextView (“VERİ TABANI İŞLEMLERİ”): Bu metin bileşeni, kullanıcıya uygulamanın ana ekranında görüntülenecek olan başlığı temsil eder. Başlık, kullanıcının uygulamanın bu bölümünde ne tür işlemler yapabileceğini belirtir.
Buttonlar:
“EKLE” Buttonu: Bu buton, kullanıcıya yeni bir kitap kaydı eklemek için bir arayüz sağlar.
“SİL” Buttonu: Bu buton, kullanıcıya mevcut bir kitap kaydını silmek için bir arayüz sağlar.
“GÜNCELLE” Buttonu: Bu buton, kullanıcıya mevcut bir kitap kaydını güncellemek için bir arayüz sağlar.
“LİSTELE” Buttonu: Bu buton, kullanıcıya mevcut kitap kayıtlarını listelemek için bir arayüz sağlar.
Her bir buton, kullanıcının belirli bir işlemi gerçekleştirmesi için bir arayüz sunar. Kullanıcı, butonlardan herhangi birine tıklayarak ilgili aktiviteleri açar.
MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import androidx.activity.EdgeToEdge; import androidx.appcompat.app.AppCompatActivity; import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; public class MainActivity extends AppCompatActivity { Button buttonEkle,buttonSil,buttonGuncelle,buttonListele; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); EdgeToEdge.enable(this); setContentView(R.layout.activity_main); ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> { Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); return insets; }); buttonEkle=findViewById(R.id.buttonEkle); buttonGuncelle=findViewById(R.id.buttonGuncelle); buttonSil=findViewById(R.id.buttonSil); buttonListele=findViewById(R.id.buttonListele); buttonEkle.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent= new Intent(MainActivity.this, EkleActivity.class); startActivity(intent); } }); buttonSil.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent= new Intent(MainActivity.this, SilActivity.class); startActivity(intent); } }); buttonListele.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent= new Intent(MainActivity.this, ListeleActivity.class); startActivity(intent); } }); } } |
Button Nesneleri Tanımlama: buttonEkle
, buttonSil
, buttonGuncelle
ve buttonListele
adlı dört adet buton nesnesi tanımlanmıştır. Bu nesneler, XML dosyasında belirlenen butonları temsil eder.
onCreate Metodu: Bu metot, MainActivity oluşturulduğunda çağrılır.
EdgeToEdge.enable(this): Bu satır, EdgeToEdge kütüphanesini kullanarak kenar boşluklarını yönetmeyi etkinleştirir.
setContentView(R.layout.activity_main): Bu satır, MainActivity’nin arayüzünü activity_main.xml dosyasındaki tasarıma bağlar.
ViewCompat.setOnApplyWindowInsetsListener: Bu metot, sistem çubuklarının (örneğin, durum çubuğu ve gezinme çubuğu) uygun bir şekilde yerleştirilmesini sağlar.
Butonları Tanımlama ve Tıklama Dinleyicileri Atama: Her bir buton için onClickListener’lar atanır. Bu dinleyiciler, ilgili butona tıklandığında yapılacak işlemleri belirtir. Örneğin, buttonEkle
butonuna tıklandığında EkleActivity’e yönlendirme gerçekleştirir.
Bu kod parçası, MainActivity.java dosyasının içeriğini gösteriyor. MainActivity, uygulamanın ana etkinliğini temsil eder ve kullanıcının uygulama üzerindeki temel veritabanı işlemlerini gerçekleştirebileceği bir arayüz sağlar.
Diğer Aktivitelerin Oluşturulması
Tüm aktiviteleri aşağıdakine benzer şekilde oluşturuyorum.
EkleActivity ➜ activity_ekle
ListeleActivity ➜ activity_listele
SilActivity ➜ activity_sil
activity_ekle.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | <?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:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".EkleActivity"> <TextView android:id="@+id/textView2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="KAYIT EKLE" android:textSize="24sp" /> <EditText android:id="@+id/editTextKitap" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:hint="KİTAP ADI" android:inputType="text" android:textSize="24sp" /> <EditText android:id="@+id/editTextYazar" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:hint="YAZAR" android:inputType="text" android:textSize="24sp" /> <EditText android:id="@+id/editTextSayfa" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:hint="SAYFA" android:inputType="text" android:textSize="24sp" /> <Button android:id="@+id/buttonKitapEkle" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="EKLE" /> </LinearLayout> |
Bu dosya, dikey bir düzen içinde yer alan bir dizi arayüz öğesini içerir:
TextView (“KAYIT EKLE”): Bu metin, kullanıcıya bu sayfanın amacını belirtir, yani yeni bir kitap kaydı eklemek.
EditText (“KİTAP ADI”): Kullanıcı buraya yeni kitabın adını girebilir. Kullanıcıya bu alana ne tür bilgi girmesi gerektiği hakkında ipucu sağlanır.
EditText (“YAZAR”): Kullanıcı buraya yeni kitabın yazarını girebilir.
EditText (“SAYFA”): Kullanıcı buraya yeni kitabın sayfa sayısını girebilir.
Button (“EKLE”): Bu düğme, kullanıcının yeni kitap kaydını eklemek için tıkladığı işlevi gerçekleştirir.
Bu arayüz, kullanıcının kolayca yeni kitap kayıtları ekleyebilmesi için gerekli alanları ve işlevleri sağlar.
işlemi başlatabilir. Bu arayüz, veritabanı işlemlerini gerçekleştirmek için kullanıcının etkileşime geçebileceği bir başlangıç noktası sağlar.
ActivityEkle.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | import androidx.appcompat.app.AppCompatActivity; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteStatement; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class EkleActivity extends AppCompatActivity { EditText editTextKitap,editTextYazar,editTextSayfa; Button buttonKitapEkle; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_ekle); editTextKitap=findViewById(R.id.editTextKitap); editTextYazar=findViewById(R.id.editTextYazar); editTextSayfa=findViewById(R.id.editTextSayfa); buttonKitapEkle=findViewById(R.id.buttonKitapEkle); try{ SQLiteDatabase db=this.openOrCreateDatabase("kitaplar",MODE_PRIVATE,null); db.execSQL("CREATE TABLE IF NOT EXISTS kitap(id INTEGER PRIMARY KEY, \n" + " kitapadi TEXT,\n" + " yazar TEXT,\n" + " sayfa INTEGER)"); buttonKitapEkle.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String kitapadi=editTextKitap.getText().toString(); String yazaradi=editTextYazar.getText().toString(); String sayfa= (editTextSayfa.getText().toString()); String query=("INSERT INTO kitap(kitapadi,yazar,sayfa) VALUES(?,?,?)"); SQLiteStatement sqLiteStatement=db.compileStatement(query); sqLiteStatement.bindString(1,kitapadi); sqLiteStatement.bindString(2,yazaradi); sqLiteStatement.bindString(3,sayfa); sqLiteStatement.execute(); Toast.makeText(EkleActivity.this, "KAYIT EKLENDİ", Toast.LENGTH_SHORT).show(); } }); }catch (Exception e){ e.printStackTrace(); } } } |
Bu EkleActivity sınıfı, kullanıcının yeni bir kitap kaydı eklemesini sağlayan bir aktiviteyi temsil eder.
- Veritabanı Bağlantısı:
onCreate
metodu içinde, “kitaplar” adında bir veritabanı oluşturulur veya varsa bu veritabanına bağlanılır. - Veritabanı Tablosu Oluşturma: Eğer “kitap” adında bir tablo yoksa, bu metot içinde yeni bir tablo oluşturulur. Tablo, kitapların ID, adı, yazarı ve sayfa sayısı gibi bilgilerini içerir.
- EditText ve Button Nesneleri Tanımlama: Kullanıcıdan alınacak kitap adı, yazarı ve sayfa sayısı bilgileri için üç adet EditText nesnesi ve yeni kayıt eklemek için bir Button nesnesi tanımlanır.
- Button Tıklama Dinleyicisi:
buttonKitapEkle
butonuna tıklandığında yapılacak işlemler bu metot içinde belirtilir. Kullanıcının girdiği bilgiler alınır ve yeni bir kayıt oluşturmak için veritabanına ekleme işlemi gerçekleştirilir. - Toast Mesajı Gösterme: Yeni kayıt eklendikten sonra kullanıcıya bilgi vermek için bir Toast mesajı gösterilir.
Bu sınıf, kullanıcının veritabanına yeni bir kitap kaydı eklemesini sağlar. Kullanıcı bu aktiviteyi kullanarak yeni kitapların veritabanına eklenmesini kolaylıkla gerçekleştirebilir.
activity_listele.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout 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:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".ListeleActivity"> <ListView android:id="@+id/listViewListe" android:layout_width="409dp" android:layout_height="729dp" android:layout_marginStart="1dp" android:layout_marginTop="32dp" android:layout_marginEnd="1dp" android:layout_marginBottom="1dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> |
Bu dosya, mevcut kitap kayıtlarını listeleyen bir ListView bileşenini içerir.
ListView bileşeni, mevcut kitap kayıtlarını dikey bir liste halinde görüntülemek için kullanılır. Bu listeleme işlemi, kullanıcının kayıtları görsel olarak görmesini ve istediği kaydı seçerek detaylarına ulaşmasını sağlar.
ListView bileşeni, ConstraintLayout içinde belirli kısıtlamalarla konumlandırılmıştır. Bu kısıtlamalar, bileşenin ekranda nasıl yer alacağını ve hangi boyutlara sahip olacağını belirler.
Bu arayüz dosyası, ListeleActivity sınıfında kullanılarak kullanıcılara mevcut kitap kayıtlarını görsel olarak sunar ve bu kayıtları seçerek detaylarına erişmelerini sağlar.
ListeleActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | import androidx.appcompat.app.AppCompatActivity; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.ListView; import java.util.ArrayList; public class ListeleActivity extends AppCompatActivity { ListView listViewListe; ArrayList kitaplarArraylist; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_listele); listViewListe=findViewById(R.id.listViewListe); kitaplarArraylist=new ArrayList<>(); ArrayAdapter arrayAdapter=new ArrayAdapter<>(this, android.R.layout.simple_list_item_1,kitaplarArraylist); listViewListe.setAdapter(arrayAdapter); try { SQLiteDatabase db=this.openOrCreateDatabase("kitaplar",MODE_PRIVATE,null); Cursor cursor=db.rawQuery("SELECT * FROM kitap",null); int siraIndex=cursor.getColumnIndex("id"); int urunIndex=cursor.getColumnIndex("kitapadi"); int fiyatIndex=cursor.getColumnIndex("yazar"); int adetIndex=cursor.getColumnIndex("sayfa"); //textViewUrunler.setText("SIRA N\t\t\tÜRÜN ADI\t\t\tÜRÜN FİYAT\t\t\tÜRÜN ADET\n"); while (cursor.moveToNext()){ //listView ekle String veri=""+(cursor.getInt(siraIndex)+"\t\t"+cursor.getString(urunIndex)+"\t\t"+cursor.getInt(fiyatIndex)+"\t\t"+cursor.getInt(adetIndex)); kitaplarArraylist.add(veri); } }catch (Exception e){ e.printStackTrace(); } } } |
Bu ListeleActivity sınıfı, mevcut kitap kayıtlarını bir ListView içinde listeleyen bir aktiviteyi temsil eder.
- setContentView(R.layout.activity_listele): Bu metot, ListeleActivity’nin arayüzünü activity_listele.xml dosyasındaki tasarıma bağlar.
- ListView Nesnesi Tanımlama:
listViewListe
adlı bir ListView nesnesi tanımlanır. Bu nesne, kitap kayıtlarını listelemek için kullanılır. - Veritabanından Veri Okuma:
onCreate
metodu içinde, “kitaplar” adlı bir veritabanından kayıtları almak için sorgu yapılır. Bu kayıtlar, bir Cursor nesnesi üzerinden döndürülür. - Verileri ListView’e Ekleme: Cursor üzerinde döngü oluşturularak her bir kitap kaydı ListView’e eklenir. Bu işlem, kitap adı, yazarı ve sayfa sayısı gibi bilgileri içeren bir dize listesi oluşturulmasıyla gerçekleştirilir.
Bu sınıf, kullanıcının mevcut kitap kayıtlarını görüntülemesini sağlar ve veritabanından bu bilgileri alarak ListView aracılığıyla gösterir.
activity_sil.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <?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:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".SilActivity"> <TextView android:id="@+id/textView3" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="KİTAP SİL" android:textSize="24sp" /> <EditText android:id="@+id/editTextKitapId" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:hint="SİLİNECEK ID" android:inputType="text" android:textSize="24sp" /> <Button android:id="@+id/buttonKitapSil" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="KİTAP SİL" /> </LinearLayout> |
Bu XML dosyası, kullanıcıların bir kitap kaydını silmek için kullanacakları SilActivity’nin arayüz tasarımını içerir.
TextView (“KİTAP SİL”): Bu metin, kullanıcıya bu sayfanın amacını belirtir, yani bir kitap kaydını silmek.
EditText (“SİLİNECEK ID”): Kullanıcı buraya silmek istediği kitap kaydının ID’sini girebilir. ID, her bir kitap kaydının benzersiz kimliğini belirtir.
Button (“KİTAP SİL”): Bu düğme, kullanıcının belirtilen ID’ye sahip kitap kaydını silmek için tıkladığı işlevi gerçekleştirir.
Bu arayüz, kullanıcının belirli bir kitap kaydını silmek için gerekli olan alanları ve işlevleri sağlar. Kullanıcı, silmek istediği kitabın ID’sini girdikten sonra “KİTAP SİL” düğmesine tıklayarak işlemi tamamlayabilir.
Bu bileşenler, kullanıcının uygulama üzerindeki temel veritabanı işlemlerini kolayca gerçekleştirmesini sağlar.
ActivitySil.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | import androidx.appcompat.app.AppCompatActivity; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteStatement; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; public class SilActivity extends AppCompatActivity { EditText editTextKitapId; Button buttonKitapSil; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sil); editTextKitapId=findViewById(R.id.editTextKitapId); buttonKitapSil=findViewById(R.id.buttonKitapSil); try { SQLiteDatabase db=this.openOrCreateDatabase("kitaplar",MODE_PRIVATE,null); buttonKitapSil.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String kitapid=editTextKitapId.getText().toString(); String query=("DELETE FROM kitap\n" + "WHERE id=?;"); SQLiteStatement sqLiteStatement=db.compileStatement(query); sqLiteStatement.bindString(1,kitapid); sqLiteStatement.execute(); } }); } catch (Exception e){ e.printStackTrace(); } } } |
Bu SilActivity sınıfı, kullanıcının mevcut bir kitap kaydını silmesini sağlayan bir aktiviteyi temsil eder.
- Veritabanı Bağlantısı:
onCreate
metodu içinde, “kitaplar” adında bir veritabanına bağlanılır veya varsa bu veritabanına bağlanılır. - EditText ve Button Nesneleri Tanımlama: Kullanıcıdan silinecek kitabın ID’sini almak için bir EditText nesnesi ve silme işlemini gerçekleştirmek için bir Button nesnesi tanımlanır.
- Button Tıklama Dinleyicisi:
buttonKitapSil
butonuna tıklandığında yapılacak işlemler bu metot içinde belirtilir. Kullanıcının girdiği kitap ID’si alınır ve bu ID’ye sahip olan kitap kaydı veritabanından silinir.
Bu sınıf, kullanıcının veritabanından mevcut bir kitap kaydını silmesini sağlar. Kullanıcı bu aktiviteyi kullanarak istediği kitabı veritabanından kolaylıkla silebilir.
Sonuç
Bu proje, Android platformunda SQLite veritabanı kullanarak basit bir kitap yönetim uygulaması geliştirmeyi hedefler. Uygulama, kullanıcıya kitap ekleme, silme ve listeleme işlemlerini gerçekleştirme imkanı sunar.
- Ekleme İşlemi: Kullanıcı, uygulamanın “EKLE” ekranında yeni bir kitap kaydı oluşturabilir. Kitap adı, yazarı ve sayfa sayısı gibi bilgiler girilerek veritabanına kaydedilir.
- Silme İşlemi: Kullanıcı, mevcut kitap kayıtlarından birini silmek için “SİL” ekranını kullanabilir. Silinecek kitabın ID bilgisini girerek ilgili kayıt veritabanından silinir.
- Listeleme İşlemi: Kullanıcı, mevcut kitap kayıtlarını “LİSTELE” ekranında görüntüleyebilir. Bu ekran, veritabanında bulunan tüm kitap kayıtlarını ListView aracılığıyla kullanıcıya sunar.
Bu işlemler, kullanıcıya temel kitap yönetimi fonksiyonlarını sağlar. Kullanıcı, bu uygulama sayesinde kolaylıkla kitap kayıtlarını yönetebilir ve gerektiğinde ekleyebilir veya silebilir.
Yorum Yap