SORU
29 Aralık 2010, ÇARŞAMBA


Android SQLite Yakın Zaman DB

Android SQLite veritabanı ile çalışıyorum. Veritabanı yöneticisi bir singleton ve şu anda başlatıldığında veritabanı bağlantısı açar. Güvenli veritabanı birisi benim sınıf veritabanı ile çalışmak için aradığında zaten açık olduğu tüm süre boyunca açık bırakmak değil mi? Ya ben ve veritabanı önce açıp kapatın ve her bir erişim ihtiyaç vardır. Sadece onu her zaman açık bırakarak bir zararı olur mu?

Teşekkürler!

CEVAP
29 Aralık 2010, ÇARŞAMBA


her zaman açık, ve onStop onDestroy gibi bazı yaşam döngüsü yöntemi kimseye söylemem. bu şekilde, kolayca eğer veritabanı zaten kullanmadan önce SQLiteDatabase tek bir nesne üzerinde isDbLockedByCurrentThread isDbLockedByOtherThreads her zaman arayarak kullanımda olup olmadığını kontrol edebilirsiniz. bu veritabanı için birden çok manipülasyonları engellemek ve olası bir kazadan uygulama kurtaracak

eğer singleton, böyle bir yöntem SQLiteOpenHelper Tek bir nesne almak zorunda.

private SQLiteDatabase db;
private MyDBOpenHelper mySingletonHelperField;
public MyDBOpenHelper getDbHelper() {
    db = mySingletonHelperField.getDatabase();//returns the already created database object in my MyDBOpenHelper class(which extends `SQLiteOpenHelper`)
    while(db.isDbLockedByCurrentThread() || db.isDbLockedByOtherThreads()) {
        //db is locked, keep looping
    }
    return mySingletonHelperField;
}

açık yardımcınız nesne kullanmak istediğiniz zaman, bu alıcı yöntem(dişli olduğundan emin olun) diyoruz

tek bir yöntem olabilir(alıcı yukarıdaki aramak için denemeden önce HER ZAMAN " adında bir film

public void setDbHelper(MyDBOpenHelper mySingletonHelperField) {
    if(null == this.mySingletonHelperField) {
        this.mySingletonHelperField = mySingletonHelperField;
        this.mySingletonHelperField.setDb(this.mySingletonHelperField.getWritableDatabase());//creates and sets the database object in the MyDBOpenHelper class
    }
}

tekil veritabanı olarak kapatmak isteyebilirsiniz:

public void finalize() throws Throwable {
    if(null != mySingletonHelperField)
        mySingletonHelperField.close();
    if(null != db)
        db.close();
    super.finalize();
}

eğer uygulamanızın kullanıcıların veritabanı etkileşimleri çok hızlı bir şekilde oluşturmak için yeteneği varsa, yukarıda gösterdiğim gibi bir şey kullanmak gerekir. ama eğer az veritabanı etkileşimleri varsa, bu konuda endişelenmenize gerek, ve sadece oluşturmak ve veritabanını KAPATIN Her zaman olmaz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Grace Su

    Grace Su

    6 Ocak 2006
  • tatermoog

    tatermoog

    2 AĞUSTOS 2006
  • The Brister

    The Brister

    10 ŞUBAT 2008