gpt4 book ai didi

android - SQLiteOpenHelper onCreate()/onUpgrade() 什么时候运行?

转载 作者:行者123 更新时间:2023-12-03 18:15:19 25 4
gpt4 key购买 nike

我在我的 SQLiteOpenHelper 中创建了我的表onCreate()但收到

SQLiteException: no such table

或者
SQLiteException: no such column

错误。为什么?

NOTE:

(This is the amalgamated summary of tens of similar questions every week. Attempting to provide a "canonical" community wiki question/answer here so that all those questions can be directed to a good reference.)

最佳答案

SQLiteOpenHelper onCreate() onUpgrade() 实际打开数据库时调用回调,例如调用 getWritableDatabase() .创建数据库助手对象本身时,不会打开数据库。
SQLiteOpenHelper版本数据库文件。版本号是 int传递给 constructor 的参数.在数据库文件中,版本号存储在 PRAGMA user_version .
onCreate()仅在数据库文件不存在且刚刚创建时运行。如果 onCreate()成功返回(不抛出异常),假设数据库是使用请求的版本号创建的。作为暗示,你不应该捕获 SQLExceptiononCreate() 中你自己。
onUpgrade()仅当数据库文件存在但存储的版本号低于构造函数中请求时才调用。 onUpgrade()应该将表模式更新为请求的版本。

在代码 ( onCreate() ) 中更改表模式时,应确保数据库已更新。两种主要方法:

  • 删除旧的数据库文件,以便 onCreate()再次运行。这通常在开发时首选,您可以控制已安装的版本并且数据丢失不是问题。删除数据库文件的一些方法:
  • 卸载应用程序。使用应用程序管理器或 adb uninstall your.package.name从壳。
  • 清除应用程序数据。使用应用程序管理器。
  • 增加数据库版本以便 onUpgrade()被调用。由于需要更多代码,因此这会稍微复杂一些。
  • 对于数据丢失不是问题的开发时间架构升级,您可以使用 execSQL("DROP TABLE IF EXISTS <tablename>")删除现有表格并调用 onCreate()重新创建数据库。
  • 对于已发布的版本,请在 onUpgrade() 中进行数据迁移。这样您的用户就不会丢失他们的数据。
  • 关于android - SQLiteOpenHelper onCreate()/onUpgrade() 什么时候运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26153317/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com