sql 新用户onUpgrade

sql onUpgrade for new users

这是一个微不足道的问题,但我担心在生产环境中放入错误的代码并且在 devices/emulator 中进行测试可能会导致无法反映实际情况的缓存问题。

我的假设:

正如在 SO 上记录的那样,我需要在我的数据库中添加一列,我决定使用 ALTER table ADD column 在 onUpgrade() 中,并将数据库构造函数中的版本从 1 更改为 2,以便构造函数识别 运行 新版本并且应触发 onUpgrade() 函数。

我的2个问题:

1) 最重要。假设老用户将成功升级数据库,但是 新用户 仍然需要创建数据库的第一行,他们会被定向到 OnCreate() 而不是 onUpgrade () 因为版本是2,或者到OnCreate() 和then onUpgrade(),或者几乎不可能直接在OnUpgrade() 跳过一些API 原因甚至onCreate() ?

换句话说,我是否需要更新新列更改旧的 onCreate() 来理解新添加的列?

2) 在

之后的 onUpgrade() 中
ALTER <table> ADD <column>

逻辑上我必须创建一个新的 table 对吗?我是否应该调用 onCreate() 作为更新的 Table(例如,而不是原来的 4 列,现在有 5 列)?

当调用getWritableDatabase()时,它会检查数据库文件。如果不存在,则调用 onCreate。如果它确实存在,但版本错误,则调用 onUpgrade

所以onCreate负责创建当前版本的数据库模式,而onUpgrade负责更改一些现有数据库以具有该模式当前版本的。

您可以在 onCreateonUpgrade 之间共享代码,但调用该代码是您自己的责任; onXxx 回调返回后,框架将不会再次检查版本。