2011-11-04 18 views
8

Android'de sqlite veritabanının var olup olmadığını ve açıp kullanabiliyorsam onu ​​görmek için aşağıdaki yöntemi kullanıyorum.Android'de, sqlite veritabanının zaman zaman başarısız olup olmadığını kontrol edin

Bu sınama başarısız olursa veritabanı dosyasını varlıklardan kopyalarım (kullanıcının yalnızca uygulamayı ilk kez başlattığı zaman bir kez gerçekleşmesi gerekir).

/* 
* Check if the database already exist to avoid re-copying the file each time you open the application. 
* @return true if it exists, false if it doesn't 
*/ 
private boolean checkDataBase() { 
    SQLiteDatabase checkDB = null; 

    try { 
     String myPath = DB_PATH + DB_NAME; 
     checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); 
    } catch(SQLiteException e) { 
     //database does't exist yet. 
    } 

    if(checkDB != null){ 
     checkDB.close(); 
    } 
    return checkDB != null ? true : false; 
} 

sorun

Ben kullanıcılardan raporlar kendi veri sildi edildiğini söyleyerek olsun ve soruşturma ne zaman veritabanı varlıklarından veritabanı ile değiştirilir görebilirsiniz olmasıdır. Bu nedenle, kullanıcı zaten bir veritabanı dosyasına sahip olsa bile, bazen SQLiteDatabase.openDatabase() bir hata atar. Sorunu kendim üretemedim, ancak bazı kullanıcılar için böyle görünüyor.

Sorunun ne olabileceği hakkında bir fikri olan var mı? Bu testi yapmanın daha iyi bir yolu var mı?

+0

Bu benim için işe yaramaz bu http://stackoverflow.com/questions/20728808/android-reading-stored-sqlite-database – gandharv09

cevap

32

Dosya sistemini ilk önce açmaya çalışmak yerine veritabanı olup olmadığını görmek için kontrol etmeyi ne dersiniz?

Zaten açık olan ve varolduğunu düşünmenize neden olan bir hatayı atacak bir veritabanı açmaya çalışıyor olabilirsiniz. veritabanı varsa

File database=getApplicationContext().getDatabasePath("databasename.db"); 

if (!database.exists()) { 
    // Database does not exist so copy it from assets here 
    Log.i("Database", "Not Found"); 
} else { 
    Log.i("Database", "Found"); 
} 
+0

ile yardım edin! Bkz. Http://stackoverflow.com/questions/18391820/checking-if-database-exists –

+3

Sadece OP ile bağlantı kurmaya çalışıyorum ki bana yardım edebilir. Kendi sorumu gönderdim ve yukarıda verilen bağlantı. Ben sadece bu sitenin amacı olan yardım istemekten başka bir şey 'kirletmiyorum' değilim. –

2

Ben kontrol etmek için bir yöntem paylaşmak istiyorum: sizin için iyi çalışır eğer bana +1 ver, teşekkürler.

private boolean checkDataBase() { 

    SQLiteDatabase checkDB = null; 

    try { 

     File database=myContext.getDatabasePath(DB_NAME); 

     if (database.exists()) { 

      Log.i("Database", "Found"); 

      String myPath = database.getAbsolutePath(); 

      Log.i("Database Path", myPath); 

      checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); 

     } else {     

      // Database does not exist so copy it from assets here 
      Log.i("Database", "Not Found"); 

     } 

    } catch(SQLiteException e) { 

     Log.i("Database", "Not Found"); 

    } finally { 

     if(checkDB != null) { 

      checkDB.close(); 

     } 

    } 

    return checkDB != null ? true : false; 
} 
+0

OP'nin karşılaştığı aynı sorundan dolayı iyi bir yöntem değildir. Veritabanı varsa ancak açılamıyorsa, var olmadığını bildirir. Bir veritabanının olup olmadığını ve açılıp açılmayacağını kontrol etmek, her ikisini de yapmanız gerekiyorsa, bağımsız işlemler olmalıdır. Ayrıca bu, iyi uygulama olmayan veritabanı durumunu belirlemek için atılan bir özel duruma dayanmaktadır. – Kuffs

İlgili konular