Android SQLiteAssetHelper无法将只读数据库从版本1升级到2:

Omi*_*mid 4 sqlite android

我想创建一个离线词典应用程序,有时需要更新,旧数据库将被新的替换.这就是我想做的事情,我用SQLiteAssetHelper图书馆做了类似的事情:

注意: SQLiteAssetHelper将数据库从assets文件夹复制到app data文件夹中

public class MyDb extends SQLiteAssetHelper {
  private static final String DATABASE_NAME    = "db.sqlite";
  private static final int    DATABASE_VERSION = 1;
  public MyDb(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
  }
}
Run Code Online (Sandbox Code Playgroud)

现在我想更新数据库,在将新db.sqlite文件放入assets文件夹后,我操纵了我的代码,如下所示:

public class MyDb extends SQLiteAssetHelper {
  private static final String DATABASE_NAME    = "db.sqlite";
  private static final int    DATABASE_VERSION = 2;
  public MyDb(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
  }
}
Run Code Online (Sandbox Code Playgroud)

但是当我编译并运行时,它说:无法将只读数据库从版本1升级到2

解决办法是什么?

通过清除应用数据,它将正常工作......

对不起,我的英语不好...

Com*_*are 7

引用文档:

如果您有一个只读数据库或者不关心用户数据丢失,那么每次通过调用增加版本号(用资产中的一个覆盖本地数据库)时,您可以强制用户访问最新版本的SQLite数据库子类构造函数中的setForcedUpgrade()方法SQLiteAsstHelper.

您还可以传递一个参数,该参数是强制升级的版本号.

请注意,这将覆盖现有的本地数据库及其中的所有数据.

你不是setForcedUpgrade()从你的构造函数调用.


S.M*_*ian 6

您应该setForcedUpgrade();构造函数之后调用:

public class MyDb extends SQLiteAssetHelper {

  private static final int    DATABASE_VERSION = 2;//+1
  public MyDb(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    setForcedUpgrade(); 
  }
}
Run Code Online (Sandbox Code Playgroud)