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 41: SQLite’ta Kullanılan İşlemleri İnceliyoruz

Android Programlama Ders 41: SQLite’ta Kullanılan İşlemleri İnceliyoruz

22 Haziran 2014 - 12:00
- Makale, Mobil, Pratik

Android Programlama Ders 41′de veri tabanı kullanarak SQLite’ta kullanılan temel işlemleri inceleceğiz.

Veri tabanın işleminin (Transaction) ne olduğunu hakkında konuşalım. İşlemin amacı veriyle çalıştığımız zaman “ya tüm ya hiç” prensipleri taşıyor. Mesela veri tabanına bir veri paketi kaydetmek gerekiyor. Veri ya tüm kaydedilecek ya da hiç kaydedilmeyecek. Eğer verilerin yarısı kaydedilmişse, kaydedilen verilerin iptal edilmesi söz konusu olacaktır. Bu imkanı bize SQLite transaction (işlem) sunuyor.

Konuyu daha iyi anlamak için basit bir uygulamayı oluşturalım.

Projeyi oluşturalım:

  • Project name: P0041_SQLiteTransaction
  • Build Target: Android 4.2
  • Application name: SQLiteTransaction
  • Package name: tr.example.sqlitetransaction
  • Create Activity: MainActivity

Bu proje için ekranı kullanmayacağız. Bu yüzden direkt MainActivity.java’yı oluşturuyoruz.

MainActivity.java:

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;

public class MainActivity extends Activity {

  final String LOG_TAG = "myLogs";

  DBHelper dbh;
  SQLiteDatabase db;

  /** Called when the activity is first created. */
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.d(LOG_TAG, "--- onCreate Activity ---");
    dbh = new DBHelper(this);
    myActions();
  }

  void myActions() {
        try {
          db = dbh.getWritableDatabase();
          delete(db, "mytable");

          db.beginTransaction();
          insert(db, "mytable", "val1");

          Log.d(LOG_TAG, "create DBHelper");
          DBHelper dbh2 = new DBHelper(this);
          Log.d(LOG_TAG, "get db");
          SQLiteDatabase db2 = dbh2.getWritableDatabase();
          read(db2, "mytable");
          dbh2.close();

          db.setTransactionSuccessful();
          db.endTransaction();

          read(db, "mytable");
          dbh.close();

        } catch (Exception ex) {
          Log.d(LOG_TAG, ex.getClass() + " error: " + ex.getMessage());
        }
      }


  void insert(SQLiteDatabase db, String table, String value) {
    Log.d(LOG_TAG, "Insert in table " + table + " value = " + value);
    ContentValues cv = new ContentValues();
    cv.put("val", value);
    db.insert(table, null, cv);
  }

  void read(SQLiteDatabase db, String table) {
    Log.d(LOG_TAG, "Read table " + table);
    Cursor c = db.query(table, null, null, null, null, null, null);
    if (c != null) {
      Log.d(LOG_TAG, "Records count = " + c.getCount());
      if (c.moveToFirst()) {
        do {
          Log.d(LOG_TAG, c.getString(c.getColumnIndex("val")));
        } while (c.moveToNext());
      }
      c.close();
    }
  }

  void delete(SQLiteDatabase db, String table) {
    Log.d(LOG_TAG, "Delete all from table " + table);
    db.delete(table, null, null);
  }

  class DBHelper extends SQLiteOpenHelper {

    public DBHelper(Context context) {
      super(context, "myDB", null, 1);
    }

    public void onCreate(SQLiteDatabase db) {
      Log.d(LOG_TAG, "--- onCreate database ---");

      db.execSQL("create table mytable ("
          + "id integer primary key autoincrement," 
          + "val text"
          + ");");
    }

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
  }

}

Kodu inceleğelim. myAction metodunda insert (Yapıştır), read (Oku) ve delete (Sil) işlemleri birleştirdim. Metodunda veri tabanına bağlıyoruz, tabloda (mytable) verileri siliniyoruz ve val1 satırı yapıştırıyoruz. Sonraki aşamada bildirime tablodan kayıtları yazdırıyoruz ve bağlantıyı kapatıyoruz.

Kaydedelim ve çalıştıralım.

Bildirime bakalım:

— onCreate Activity —
— onCreate database —
Delete all from table mytable
Insert in table mytable value = val1
Read table mytable
Records count = 1
val1

Herşey doğru kaydını başarıyla yapıştırdık ve bildirime yazdırdık. Şimdi işlem (Transaction) kullanmayı deneyelim. myAction metodu değiştirelim:

void myActions() {
     db = dbh.getWritableDatabase();
     delete(db, "mytable");
     db.beginTransaction();
     insert(db, "mytable", "val1");
     db.endTransaction();
     insert(db, "mytable", "val2");
     read(db, "mytable");
     dbh.close();
 }

Veri tabanına bağlanıyoruz, tabloyu temizliyoruz, beginTransaction metodu kullanarak işlemi (Transaction) başlatıyoruz, val1 yapıştırıyoruz ve endTransaction yardımıyla işlemi kapatıyoruz. Sonraki aşamada val2 kaydını yapıştırıyoruz, bildirime yazdırıyoruz ve bağlantıyı kapatıyoruz. Kaydedelim ve çalıştıralım. Bildirime bakalım:

— onCreate Activity —
Delete all from table mytable
Insert in table mytable value = val1
Insert in table mytable value = val2
Read table mytable
Records count = 1
val2

Bildirimden görüyoruz ki tabloda sadece ikinci kayıt mevcut. Bunun sebebi, işlemin başarıyla kapatılması (setTransactionSuccessful) metodunu kullanmadık. myAction metodu değiştirelim:

void myActions() {
     db = dbh.getWritableDatabase();
     delete(db, "mytable");
     db.beginTransaction();
     insert(db, "mytable", "val1");
     db.setTransactionSuccessful();
     insert(db, "mytable", "val2");
     db.endTransaction();
     insert(db, "mytable", "val3");
     read(db, "mytable");
     dbh.close();
   }

Aynı şekilde veri tabanına bağlanıyoruz, tabloyu temizliyoruz ve val1 yapıştırıyoruz setTransactionSuccessful metoduyla işlemin başarılı olduğunu belirliyoruz, val2 kaydı yapıştırıyoruz, işlemi kapatıyoruz, val3 kayıdı yapıştırıyoruz ve read metodu kullanarak bildirime içindekileri yazdırıyoruz. Bağlantıyı kapatıyoruz (dbh.close()). Kaydedelim ve bildirime bakalım:

— onCreate Activity —
Delete all from table mytable
Insert in table mytable value = val1
Insert in table mytable value = val2
Insert in table mytable value = val3
Read table mytable
Records count = 3
val1
val2
val3

Tüm kayıtları başarıyla yapıştırdık. Dikkat ederseniz val2 setTransactionSuccessful metodundan sonra yapıştırdık. Tavsiye edilen yöntem kayıtları setTransaction Succesful metodundan önce yapıştırmak.

İşlem (Transaction) başladığında veri tabanı bağlantısını bloke ediyor. Örnekte işlemi gerçekleşince veri tabanına yeni bağlantı kurmayı deneyelim. myAction metodu değiştirelim:

void myActions() {
     try {
       db = dbh.getWritableDatabase();
       delete(db, "mytable");
 
       db.beginTransaction();
       insert(db, "mytable", "val1");
 
       Log.d(LOG_TAG, "create DBHelper");
       DBHelper dbh2 = new DBHelper(this);
       Log.d(LOG_TAG, "get db");
       SQLiteDatabase db2 = dbh2.getWritableDatabase();
       read(db2, "mytable");
       dbh2.close();
 
       db.setTransactionSuccessful();
       db.endTransaction();
 
       read(db, "mytable");
       dbh.close();
 
     } catch (Exception ex) {
       Log.d(LOG_TAG, ex.getClass() + " error: " + ex.getMessage());
     }
  }

Veri tabanına bağlanıyoruz, tabloyu temizliyoruz, işlemi başlatıyoruz, kayıdı yapıştırıyoruz. Sonraki aşamada yeni bağlantıyı oluşturuyoruz. İkinci bağlantıyı (db2) kullanarak mytable tablosundakileri okuyoruz. İkinci bağlantıyı kapatıyoruz, işlemi kapatıyoruz, birinci bağlantıyla mytable tablosundan içindekileri okuyoruz ve birinci bağlantıyı kapatıyoruz. Kaydedelim ve çalıştıralım.

Bildirime bakalım:

— onCreate Activity —
Delete all from table mytable
Insert in table mytable value = val1
create DBHelper
get db
class android.database.sqlite.SQLiteException error: database is locked

Bildirimde veri tabanına ikinci defa bağlantısında hata oluştuğunu görebiliriz. Eğer koddan işlemi yönetilen satırı siler ve yeniden programı çalıştırırsanız, bildirim hatayı göstermeyecek.

İşlemi kullanmak tavsiye edilen formu aşağıdaki veriyorum:

db.beginTransaction();
     try {
       ...
       db.setTransactionSuccessful();
     } finally {
       db.endTransaction();
     }

Ders Sonu Notları:

Bugünkü derslerimizde işlem (Transaction) konusuna değindik. Gelecek derste veri tabanının versiyon yapısını değiştirmeyi öğreneceğiz.

Etiketler: AndroidAndroid programlama dersleribeginTransactiondersendTransactioninsertprogramlamasetTransactionSuccesfultechnopatteknolojiTransactionuygulamaYazı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

  • Ghost of Yōtei alınır mı?
  • 15.000 TL ekran kartı önerisi
  • Render için 64 GB ya da 32 GB RAM önerisi
  • Din, Türkler İçin Avantaj mı, Dezavantaj mı?
  • Spor için kulaklık önerisi
  • Şehrinizde yemek fiyatları nasıl?
  • IKEA Markus 8.799TL
  • Orijinal matematik soru bankasının orijinal testlerinin zorluğu hangi seviyede?
  • Galatasaray 1-0 Liverpool
  • RDR2 15 dolara düştü (623 TL)

Technopat Video

Şu an oynayan

Apple Watch’u bambaşka bir seviyeye taşıyan 5 uygulama

Apple Watch’u bambaşka bir seviyeye taşıyan 5 uygulama

Apple Watch’u bambaşka bir seviyeye taşıyan 5 uygulama

Akıllı Saat
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

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