【问题标题】:Can't downgrade database from version 2 to 1无法将数据库从版本 2 降级到 1
【发布时间】:2013-02-07 16:58:55
【问题描述】:

谁能帮我解决我的代码中出现的这个异常?

02-10 17:16:32.406: E/AndroidRuntime(8619): android.database.sqlite.SQLiteException: Can't downgrade database from version 2 to 1

我陷入了困境。我真的应该关心这个“数据库版本”吗?

【问题讨论】:

  • 看来你在这里有一个很好的答案。如果正确请采纳。

标签: android database-connection


【解决方案1】:

假设您使用的是Android SQLiteOpenHelper,如果您希望能够在设备上运行您的应用程序时使用的数据库版本高于您的代码可以处理的版本,则需要覆盖onDowngrade

如果您的数据库架构要改变(一般来说,很有可能),您应该关心这个“数据库版本”。

【讨论】:

  • 关于 onDowngrade 请注意:如果不被覆盖,默认实现将拒绝降级并抛出 SQLiteException
  • 一般onDowngrade()中会进行哪些操作?
【解决方案2】:

检查你的数据库 SqliteOpenHelper 构造函数,如果你在 SQLitehelper 上使用更多,如 ORM,最后一个参数应该是相同的

【讨论】:

    【解决方案3】:

    我试图将 SQLite 版本 1 更改为 2,因为我必须增加版本才能向我的表中添加一个新列 (alter)。它运行良好。然后,为了好玩,我尝试将 2 更改为 1,如下所示:

    发件人:

    public DatabaseHelper(Context context) {super(context, DB_NAME, null, 2);}
    

    收件人:

    public DatabaseHelper(Context context) {super(context, DB_NAME, null, 1);}
    

    然后我得到了这个:

    FATAL EXCEPTION: main
                                                     Process: com.example.android.vocab, PID: 3360
                                                     android.database.sqlite.SQLiteException: Can't downgrade database from version 2 to 1
    

    正如我之前所解释的,我们不能在增加 SQLite 版本之后再降低它。所以需要改回2或者大于2

    public DatabaseHelper(Context context) {
       super(context, DB_NAME, null, 2);
    }
    

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

    如果你真的想降级版本,你可以覆盖onDowngrade()as @Matthieu 在他的回答中表达。

    【讨论】:

      猜你喜欢
      • 2015-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-20
      • 1970-01-01
      • 2020-09-03
      相关资源
      最近更新 更多