即使在全新安装和重新运行后,也无法将数据库从版本2降级为1

Ela*_*da2 11 java database sqlite android

我正在使用SQLite DB编写一个Android应用程序.

我进行了很少的实验,并将数据库版本从1更改为2.

然后我的数据库架构变得稳定,因为我没有发布应用程序,它是我自己使用的

我决定再次将版本更改为1.

我做了全新安装,一切正常.

但是第二次运行会抛出这个错误:

06-05 10:03:35.683: E/AndroidRuntime(9010): android.database.sqlite.SQLiteException: Can't downgrade database from version 2 to 1
06-05 10:03:35.683: E/AndroidRuntime(9010):     at android.database.sqlite.SQLiteOpenHelper.onDowngrade(SQLiteOpenHelper.java:361)
Run Code Online (Sandbox Code Playgroud)

为什么这样,毕竟我做了全新安装,DB也应该被删除了.没有?

如何将版本再次更改为1?

laa*_*lto 18

在以下情况下抛出此异常:

  • 您运行代码的设备具有版本2的数据库文件.
  • 代码请求数据库的版本1(带有SQLiteOpenHelper构造函数的参数)
  • onDowngrade() 未在代码中重写.

你说新安装后第一次代码工作正常.确保没有其他代码可以将同一数据库文件的版本号再次提升到2.

  • 版本降级的可能原因是什么? (2认同)

小智 6

有同样的问题,我是这样解决的。

@Override
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  db.setVersion(oldVersion);
}
Run Code Online (Sandbox Code Playgroud)


Bla*_*nka 5

onDowngrade()如果您希望能够使用设备上的数据库运行应用程序,并且版本高于您的代码可以处理的版本,您可以自行重写。

这是默认实现onDowngrade()

public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    throw new SQLiteException("Can't downgrade database from version " +
            oldVersion + " to " + newVersion);
}
Run Code Online (Sandbox Code Playgroud)

如果您需要覆盖此方法,请同时阅读此问题

如果不重写该方法,我们就无法在增加并执行后减少 SQLite 版本。所以你需要改回2或大于2

public DatabaseHelper(Context context) {
   super(context, DB_NAME, null, 2);
}
Run Code Online (Sandbox Code Playgroud)

如果您尝试更新表,可能需要通过3not2并且每次需要更新表时,您都需要增加版本(而不是减少)