2011-11-22 53 views
2

所以我有一個市場上的應用程序。它運行了好幾個月。我已經使用小錯誤修復更新了兩次,並且沒有更改數據庫。Android數據庫錯誤 - getWriteableDatabase

我的一些用戶越來越以下錯誤:

android.util.Log$TerribleFailure: Can t downgrade read-only database from version 2 to 1: /data/data/myapp/databases/MyAppDB 
at android.util.Log.wtf(Log.java:275) 
at android.util.Log.wtf(Log.java:254) 
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:129) 

正如我前面提到,已有如有更新到數據庫沒有變化。它顯然在調用getWriteableDatabase方法時崩潰。我很難理解爲什麼會出現這種錯誤。

我最好的猜測是用戶手機沒有剩餘空間,因此可寫數據庫不能打開,從而導致應用程序崩潰。

任何想法?

回答

2

sqlite數據庫有一個版本號。版本號在打開數據庫時設置。

例如,如果使用SQLiteOpenHelper,則構造函數具有int version參數。

由於在用戶的設備上存在一個版本爲2的舊數據庫集,但在您的程序更新中,您試圖打開舊數據庫請求版本= 1,所以發生錯誤。這是不允許的。

只需將更新程序的版本設置爲2或更多。

+2

我不明白的是,版本是如何變成版本2的。我將初始版本設置爲1,並且從未將其更改爲2.那麼這怎麼可能? 而且它只發生在少數用戶身上,並非每個人都下載了更新。 – Richard