Sonuç bulunamadı
Bütün Sonuçları Göster
Teknoloji tutkunu Technopatların ortak adresi: Technopat.net
  • Haber
  • Yapay Zeka
  • Tavsiyeler
  • Oyun
  • Video
  • Teknoloji
    • Mobil
    • Yazılım
    • Elektronik Alışveriş Fırsatları
    • Pratik
    • Ev Teknolojileri
    • Makale
    • Güvenlik
    • Ekonomi
    • İnternet
    • Giyilebilir Teknoloji
    • Sağlık
    • Yazıcı
    • Sosyal Medya
    • Otomobil
      • Elektrikli Otomobil
  • Sosyal
Teknoloji tutkunu Technopatların ortak adresi: Technopat.net
  • Haber
  • Yapay Zeka
  • Tavsiyeler
  • Oyun
  • Video
  • Teknoloji
    • Mobil
    • Yazılım
    • Elektronik Alışveriş Fırsatları
    • Pratik
    • Ev Teknolojileri
    • Makale
    • Güvenlik
    • Ekonomi
    • İnternet
    • Giyilebilir Teknoloji
    • Sağlık
    • Yazıcı
    • Sosyal Medya
    • Otomobil
      • Elektrikli Otomobil
  • Sosyal
Sonuç bulunamadı
Bütün Sonuçları Göster
Teknoloji tutkunu Technopatların ortak adresi: Technopat.net

Anasayfa - Makale - Pratik - Android Programlama Ders 37: SQLite Veritabanı Kullanmayı Öğreniyoruz

Android Programlama Ders 37: SQLite Veritabanı Kullanmayı Öğreniyoruz

11 Mayıs 2014 - 12:00
- Mobil, Pratik

Android Programlama Ders 37’de SQlite kullanarak verileri kaydetmeyi öğreneceğiz.

Geçen derslerimizde verileri kaydetmek için en basit yöntemi kullandık – Preferences. Ama büyük verileri kaydetmek için bu yöntem pek uygun değildir. Bu derste verileri kaydetmek için SQLite veri tabanı kullanacağız.

İlk başta uygulamanın ve veritabanının çalışmanın prensipleri hakkında konuşalım.

Uygulamada veri tabanına bağlandığımız zaman, veri tabanının ismi ve versiyonunu belirtmemiz gerekiyor. Bu aşamada üç tane durum oluşabiliyor:

1)      Veri tabanı mevcut değil. Bu durum uygulamanın ilk açılışında olabilir. Bu durumda uygulama veri tabanı ve tüm tabloları kendi oluşturuyor. İleride uygulama bu veri tabanıyla çalışıyor.

2)      Veri tabanı mevcut ama versiyonu eski. Bu durum uygulamayı güncellediğimiz zaman karşımıza gelebilir. Mesela uygulamanın yeni versiyonunda yeni tablolar veya sütunlar mevcut olabilir. Bu durumda veri tabanı tabloları veya sütunları güncelleniyor veya yenisini oluşturuyor.

3)      Veri tabanı mevcut ve versiyonu yeni. Bu durumda uygulama veritabanıyla problemsiz bağlanıyor ve çalışıyor.

Bu durumları işletmek için DBHelp klası oluşturacağız. Bu klas SQLiteOpenHelper soyut (abstract) klasından metotları miras alacak. DBHelp klası kullanarak veritabanı oluşturma ve güncelleme yapabileceğiz.

onCreate – metod veritabanı oluşturmak için kullanılıyor.

onUpgrade – metod veritabanı güncellemek için kullanılıyor.

Konuyu daha iyi anlamak için basit bir uygulamayı oluşturalım. Uygulamamız kullanıcı bilgileri içerecek (isim ve mail). Verileri ekrandan gireceğiz ve sonucu, bildirimleri (Log) kullanarak alacağız.

Projeyi oluşturalım:

  • Project name: P0037_SimpleSQLite
  • Build Target: Android 4.2
  • Application name: SimpleSQLite
  • Package name: tr.example. simplesqlite
  • Create Activity: MainActivity

 

Main.xml’i açalım ve ekranı oluşturalım:

<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical">
 <LinearLayout
 android:id="@+id/linearLayout1"
 android:layout_width="match_parent"
 android:layout_height="wrap_content">
 <TextView
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="Name"
 android:layout_marginLeft="5dp"
 android:layout_marginRight="5dp">
 </TextView>
 <EditText
 android:id="@+id/etName"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_weight="1">
 <requestFocus>
 </requestFocus>
 </EditText>
 </LinearLayout>
 <LinearLayout
 android:id="@+id/linearLayout3"
 android:layout_width="match_parent"
 android:layout_height="wrap_content">
 <TextView
 android:id="@+id/textView2"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="Email"
 android:layout_marginLeft="5dp"
 android:layout_marginRight="5dp">
 </TextView>
 <EditText
 android:id="@+id/etEmail"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_weight="1">
 </EditText>
 </LinearLayout>
 <LinearLayout
 android:id="@+id/linearLayout2"
 android:layout_width="match_parent"
 android:layout_height="wrap_content">
 <Button
 android:id="@+id/btnAdd"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="Add">
 </Button>
 <Button
 android:id="@+id/btnRead"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="Read">
 </Button>
 <Button
 android:id="@+id/btnClear"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="Clear">
 </Button>
 </LinearLayout>
 </LinearLayout>

İki tane giriş alanı ve üç tane butonu içeriyor. Ekleme (Add) , okuma (Read) ve silme (Clear) butonu olacak.

MainActivity.java oluşturalım:

import android.app.Activity;
 import android.content.ContentValues;
 import android.content.Context;
 import android.database.Cursor;
 import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteOpenHelper;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.Button;
 import android.widget.EditText;
 
 public class MainActivity extends Activity implements OnClickListener {
 
   final String LOG_TAG = "myLogs";
 
   Button btnAdd, btnRead, btnClear;
   EditText etName, etEmail;
 
   DBHelper dbHelper;
 
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
 
     btnAdd = (Button) findViewById(R.id.btnAdd);
     btnAdd.setOnClickListener(this);
 
     btnRead = (Button) findViewById(R.id.btnRead);
     btnRead.setOnClickListener(this);
 
     btnClear = (Button) findViewById(R.id.btnClear);
     btnClear.setOnClickListener(this);
 
     etName = (EditText) findViewById(R.id.etName);
     etEmail = (EditText) findViewById(R.id.etEmail);
     
     // veritabani olusturmak ve guncellemek icin nesneyi olusturuyoruz
     dbHelper = new DBHelper(this);
   }
 
   
   @Override
   public void onClick(View v) {
     
     // verileri icin nesneyi olusturuyoruz
     ContentValues cv = new ContentValues();
     
     // giris alanindan verileri aliyoruz
     String name = etName.getText().toString();
     String email = etEmail.getText().toString();
 
     // veritabaniya baglaniyoruz
     SQLiteDatabase db = dbHelper.getWritableDatabase();
     
 
     switch (v.getId()) {
     case R.id.btnAdd:
       Log.d(LOG_TAG, "--- Insert in mytable: ---");
       // giricek verileri hazirliyoruz: sutunun ismi ve degeri
       
       cv.put("name", name);
       cv.put("email", email);
       // verileri ekliyoruz ve ID aliyoruz
       long rowID = db.insert("mytable", null, cv);
       Log.d(LOG_TAG, "row inserted, ID = " + rowID);
       break;
     case R.id.btnRead:
       Log.d(LOG_TAG, "--- Rows in mytable: ---");
       //mytable tablodan verileri sorguluyoruz ve Cursor aliyoruz 
       Cursor c = db.query("mytable", null, null, null, null, null, null);
 
       // Cursoru birinci sutune yerlestiriyoruz
       // sutunu bulmadigi zaman false gonderecek
       if (c.moveToFirst()) {
 
         //sutunlerin numarayi bulmak icin isimleri kullaniyoruz
         int idColIndex = c.getColumnIndex("id");
         int nameColIndex = c.getColumnIndex("name");
         int emailColIndex = c.getColumnIndex("email");
 
         do {
           // sutun numarayi kullanarak degeri alip loga yazdiriyoruz
           Log.d(LOG_TAG,
               "ID = " + c.getInt(idColIndex) + 
               ", name = " + c.getString(nameColIndex) + 
               ", email = " + c.getString(emailColIndex));
           // sonraki sutune geciyoruz
           // sutun olmadigi zaman false gonderiyoruz ve cikiyoruz        } while (c.moveToNext());
       } else
         Log.d(LOG_TAG, "0 rows");
       c.close();
       break;
     case R.id.btnClear:
       Log.d(LOG_TAG, "--- Clear mytable: ---");
       // verileri siliyoruz
       int clearCount = db.delete("mytable", null, null);
       Log.d(LOG_TAG, "deleted rows count = " + clearCount);
       break;
     }
     // veritabaniyla baglantiyi kapatiyoruz
     dbHelper.close();
   }
   
   
 
   class DBHelper extends SQLiteOpenHelper {
 
     public DBHelper(Context context) {
       //super klasin tasarimci 
       super(context, "myDB", null, 1);
     }
 
     @Override
     public void onCreate(SQLiteDatabase db) {
       Log.d(LOG_TAG, "--- onCreate database ---");
       // tabloyu olusturuyoruz
       db.execSQL("create table mytable ("
           + "id integer primary key autoincrement," 
           + "name text,"
           + "email text" + ");");
     }
 
     @Override
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 
     }
   }
 
}

 

Yukarıdaki verdiğim kodu inceleyelim.

Activity – onCreate metodunda nesneleri belirtiyoruz ve işleticiyi bağlıyoruz. Sonra DBHelper klası dbHelper veritabanı yönetmek için nesneyi oluşturuyoruz.

Activity – onClick metodunda butona basılmasını işletiyoruz.

ContentValues klası tablonun sütunları ve değerlerini belirtmek için kullanacağız. Cv nesneyi oluşturuyoruz. Giriş alanından verileri kaydediyoruz. getWritableDatabase metodu kullanarak veritabanına bağlanıyoruz ve SQLiteDatabase nesneyi alıyoruz. Bu nesne veritabanıyla çalışma imkanı sunacaktır. Nesneye insert (eklemek) ile verileri ekliyoruz, query (sorgulamak) ile verileri okuyoruz ve delete (silmek) ile verileri siliyoruz. Sonraki aşamada hangi butona basıldığını öğreniyoruz:

btnAdd – verileri mytable tabloya ekliyor. Cv nesneyi sütunun ismi ve değeri ile dolduruyoruz. Biz name ve email alanları giriyoruz. Id otomatik (primary key autoincrement) olarak değeri alıyor. insert – metodu çağırıyoruz ve tablonun ismi ve cv nesneyi iletiyoruz. İkinci argüman tabloya boş sütunu eklemek için kullanılır. Bu özelliği şu anda kullanmadığımız için null değeri iletiyoruz. Insert metodu bize eklenen sütunun ID’sini veriyor. Biz ID’yi kaydediyoruz ve bildirimde (LogCat’ta görebilirsiniz) gösteriyoruz.

btnRead – verileri mytable tablosundan okuyor.Verileri okumak için query metodu kullanılıyor. Giriş olarak tablonun ismi, sütunların listesi, seçme şartları, gruplama ve sıralama geçerli. Uygulamamızda tüm verileri kullandığımız için gruplama ve sıralama yerinde null değeri kullanacağız. Sadece tablonun ismini kullanacağız. Metod sonuç olarak Cursor klasın nesnesini verecek. Bu nesneyi veri tablosu olarak sayabiliriz. moveToFirst metod – Cursor’da ilk kayıtı aktif haline getiriyor aynı anda daha önce veri girip girmediğini kontrol ediyor.

Sonraki aşamada getColumnIndex metodu kullanarak Cursor’taki sütunların isimlerini kullanıp, sütunların numaralarını öğreniyoruz. Bu numaraları getInt ve getString metodunda verileri okumak için kullanacağız. moveToNext metodu kullanarak Cursor’da tüm sütunları tarayabiliriz. Kayıt olmadığı zaman bildirime (Log) – 0 rows yazdırıyoruz. Sonunda Cursor’u close metodu kullanarak kapatıyoruz, çünkü tekrar kullanmayacağız.

btnClear – tabloyu siliyoruz. delete metodu kullanarak kayıtları siliyoruz. Giriş olarak tablonun ismini veriyoruz. Ve null (boş) değeri silme şartları için belirtiyoruz. Bu demek ki tümünü silecek. Bu metod sonuç olarak silinen kayıtların sayısını gönderiyor.

Son aşamada close metodu kullanarak veritabanıyla bağlantıyı kapatıyoruz.

DBHelper klasta super tasarımcıyı çağırıyoruz ve context,mydb,null ve 1 değişkenleri gönderiyoruz.

Context – uygulamanın temel metodlarını uygulama imkanı sunuyor.

Mydb – veritabanın ismi.

Null – kürsörü (Cursor) kullanmayacağımız için null (boş) değiri gönderiyoruz.

1 – veritabanın versiyonu.

onCreate metodunda execSQL metodu kullanarak SQL sorguyla tabloyu oluşturuyoruz. Bu sorgu veritabanı olmadığı zaman kullanılıyor. Sorgu gördüğümüz gibi id, name ve email sütunuyla mytable tablosunu oluşturuyor.

onUpgrade metodunu şu anda boş bırakıyoruz, çünkü tek bir veritabanı kullanacağız.

Kaydedelim ve uygulamayı çalıştıralım. Veritabanı çalıştırarak çalışan metodları, bildirimleri (Log) kullanarak inceleyeceğiz.

OmerAslan

Bildirimlere bakalım:

— onCreate database —
— Insert in mytable: —
row inserted, ID = 1

onCreate metodu çağırdığını görüyoruz. Bu demektir ki veritabanı oluşturacak çünkü ilk defa uygulamayı çalıştırıyoruz ve daha önce veritabanı oluşturmadık. Veritabanı oluşturduktan sonra onunla çalışabiliyoruz. Sonraki satırda insert (ekle) metodu çağırdığını görüyoruz. Bu metod bize ID = 1 geri gönderdi.

Bir kayıt daha ekleyelim.

Osman

Bildirime bakıyoruz:

— Insert in mytable: —
row inserted, ID = 2

Bu sefer onCreate metodunu görmüyoruz. Çünkü veritabanını daha önce oluşturduk. Yeni kayıtlarımızın ID = 2 olduğunu görüyoruz.

Tablonun içeriğine bakalım. Bunu yapmak için Read butonuna basmamız gerekiyor.

Bildirime bakalım:

— Rows in mytable: —
ID = 1, name = Omer Aslan, email = [email protected]
ID = 2, name = Osman bey, email = [email protected]

Daha önce girdiğimiz kayıtları görüyoruz.

Clear butonuna basalım ve tabloyu silelim. Bildirimlere bakıyoruz:

— Clear mytable: —
deleted rows count = 2

İki kayıt silindi. Şimdi tablonun içiriğe bakalım Read:

— Rows in mytable: —
0 rows

Kayıtlar bulunamadı.

Ders Sonu Notları:

Bu derste önemli olan, veritabanıyla çalıştığımız zaman iki klası kullandık.

DBHelper klas SQLiteOpenHelper metotları miras alıyor. Bu klasta veritabanı oluşturuyoruz ve versiyonun numarasını belirtiyoruz. getWritableDatabase metodu veritabanına bağlanıyor ve SQLiteDatabase nesneyi gönderiyor. Close metodu veritabanıyla bağlantıyı kapatıyor. Ve veritabanı oluşturmak veya güncellemek için onCreate ve onUpgrade metodu kullanıyoruz.

– SQLiteDatabase verilerle çalışmak için metotları (Ekle, sil, oku, güncelle) içeriyor.

Gelecek derslerimizde aynı uygulamayı geliştireceğiz. Yeni imkanları (güncelleme ve belirli kayıt silme) ekleyeceğiz. Bunun için query ve delete metotlarını kullanacağız.

 

 

Etiketler: AndroidAndroid programlama dersleriContentValuesDBHelpdersgetWritableDatabaseonCreateonUpgradeprogramlamaquerySQLiteSQLiteDatabaseteknolojiYazılımyeni
PaylaşPaylaşTweetYollaPaylaş
Victor Cuiumju

Victor Cuiumju

Yorum Yap Yanıtı iptal et

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

RSS Technopat Sosyal

  • IPhone fanboylarının hissettiği
  • Kaspersky Endpoint Security'de bulunan arayüz Home Security ürünlerine de gelse iyi olmaz mıydı?
  • M.2 SSD sürücü eksik hatası veriyor
  • 2500TL manyetik klavye önerisi
  • CODE VEIN, 137 TL!
  • PlayStation 5 vs PC
  • GTX 1060 sistemde CS2 çöküp duruyor
  • 2. el Kindle alınır mı?
  • RTX 5080 4K performansı nasıl?
  • HP Pavilion 2019 GTX 1650 Ti alınır mı?

Technopat Video

Şu an oynayan

Apple’ı 20’ye katlayan saat! Huawei Watch GT 6 Pro incelemesi

Huawei Watch GT 6 Pro

Apple’ı 20’ye katlayan saat! Huawei Watch GT 6 Pro incelemesi

Akıllı Saat
Technopat ofisi Eylül ayında neler aldı? 

Technopat ofisi Eylül ayında neler aldı? 

Giyilebilir Teknoloji
Gigabyte AORUS FO27Q5P: 500 Hz QD-OLED ile rekabetçi oyunculara özel monitör

Gigabyte AORUS FO27Q5P: 500 Hz QD-OLED ile rekabetçi oyunculara özel monitör

Haber

Teknoloji tutkunu Technopatların ortak adresi: Technopat.net!

Güncel teknoloji, internet, donanım, yazılım, oyun ve daha fazlası haber, makale ve videolar ile Technopat’ta sizlerle.


01010100 01100101 01100011 01101000 01101110 01101111 01110000 01100001 01110100

Kategoriler

  • Yapay Zeka
  • Ev Teknolojileri
  • Makale
  • Video

Sosyal Medya

Bağlantılar

  • Hakkında
  • Haber
  • Video
  • Sosyal
  • Çerez Politikası
© 2011-2025 Technopat. Tüm Hakları Saklıdır.
Netse
Çerez Onayı
Web sitemizi ziyaret ettiğinizde, kullanıcı deneyiminizi daha iyi hale getirmek, hizmetlerimizi size daha etkin bir şekilde sunabilmek için çerezler (cookies) ve benzeri araçlar kullanıyoruz. Çerezler, internet sitesinin düzgün çalışmasını sağlamak, içeriği kişiselleştirmek, sosyal medya özellikleri sağlamak ve trafik analizi yapmak için kullanılan küçük metin dosyalarıdır. Çerezleri nasıl kullandığımız ve kişisel verilerinizi nasıl işlediğimiz hakkında daha fazla bilgi almak için çerez politikamızı ve kişisel veri politikamızı inceleyebilirsiniz.
Fonksiyonel Her zaman aktif
Teknik depolama veya erişim, sadece kullanıcının açıkça talep ettiği belirli bir hizmetin kullanılmasını sağlama amacıyla veya iletişimin elektronik iletişim ağı üzerinden iletilmesinin tek amacıyla yasal olarak kesinlikle gereklidir.
Tercihler
Teknik depolama veya erişim, abone veya kullanıcı tarafından istenmeyen tercihlerin depolanması yasal amacıyla gereklidir.
İstatistikler
Sadece istatistiksel amaçlarla kullanılan teknik depolama veya erişim. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Pazarlama
Teknik depolama veya erişim, reklam gönderimi için kullanıcı profilleri oluşturmak veya kullanıcıyı bir web sitesinde veya birden fazla web sitesinde benzer pazarlama amaçları için takip etmek amacıyla gereklidir.
Seçenekleri yönet Hizmetleri yönetin {vendor_count} satıcılarını yönetin Bu amaçlar hakkında daha fazla bilgi edinin
Tercihleri yönet
{title} {title} {title}
Onayı Yönet
En iyi deneyimleri sunmak için, cihaz bilgilerini saklamak ve/veya bunlara erişmek amacıyla çerezler gibi teknolojiler kullanıyoruz. Bu teknolojilere izin vermek, bu sitedeki tarama davranışı veya benzersiz kimlikler gibi verileri işlememize izin verecektir. Onay vermemek veya onayı geri çekmek, belirli özellikleri ve işlevleri olumsuz etkileyebilir.
Fonksiyonel Her zaman aktif
Teknik depolama veya erişim, abone veya kullanıcı tarafından açıkça talep edilen belirli bir hizmetin kullanılmasını sağlamak veya bir elektronik iletişim ağı üzerinden bir iletişimin iletimini gerçekleştirmek amacıyla meşru bir amaç için kesinlikle gereklidir.
Tercihler
Teknik depolama veya erişim, abone veya kullanıcı tarafından talep edilmeyen tercihlerin saklanmasının meşru amacı için gereklidir.
İstatistik
Sadece istatistiksel amaçlar için kullanılan teknik depolama veya erişim. Sadece anonim istatistiksel amaçlar için kullanılan teknik depolama veya erişim. Mahkeme celbi, İnternet Hizmet Sağlayıcınızın gönüllü uyumu veya üçüncü bir taraftan ek kayıtlar olmadan, yalnızca bu amaçla depolanan veya alınan bilgiler genellikle kimliğinizi belirlemek için kullanılamaz.
Pazarlama
Teknik depolama veya erişim, reklam göndermek için kullanıcı profilleri oluşturmak veya benzer pazarlama amaçları için kullanıcıyı bir web sitesinde veya birkaç web sitesinde izlemek için gereklidir.
Seçenekleri yönet Hizmetleri yönetin {vendor_count} satıcılarını yönetin Bu amaçlar hakkında daha fazla bilgi edinin
Tercihleri görüntüle
{title} {title} {title}
Sonuç bulunamadı
Bütün Sonuçları Göster
  • Giriş
  • Teknoloji Haberleri
  • Sosyal
  • Video
  • Tavsiyeler
  • İncelemeler
    • Video İncelemeler
  • Güvenlik
  • Oyun
  • Makale
    • Pratik
    • Yazar Köşeleri

© 2025 Technopat
Sorularınız için Technopat Sosyal