所以我在市场上有一个应用程序。几个月来一直运行良好。我已经用小错误修复对其进行了两次更新,并且从未对数据库进行过任何更改。
我的一些用户收到以下错误:
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 方法时,它显然会崩溃。我对为什么会发生此错误感到困惑。
我最好的猜测是用户的手机没有剩余空间,因此可写数据库无法打开,从而导致应用程序崩溃。
有什么想法吗?
最佳答案
sqlite 数据库有一个版本号。版本号在您打开数据库时设置。
例如,如果您使用SQLiteOpenHelper
,构造函数有int version
参数。
你得到的错误发生是因为在用户的设备上有一个版本为 2 的旧数据库,但是在你的程序更新中你试图打开那个请求版本为 1 的旧数据库。这是不允许的。
只需将更新程序上的版本设置为 2 或更多即可。
关于Android 数据库错误 - getWriteableDatabase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8223449/