这是一个微不足道的问题,但我害怕生产错误的代码,并且在设备/模拟器中进行测试可能会导致缓存问题无法反映现实。
我的假设:
在SO上有详细记录,我需要在我的数据库中添加一列,我决定使用ALTER table ADD column
在onUpgrade()中,并将DB的构造函数中的版本从1更改为2,以便构造函数能够识别正在运行新版本并且应该触发onUpgrade()函数。
我的2个问题:
1)最重要的是。假设旧用户将成功升级数据库,但是新用户仍然需要创建数据库的第一行,它们将被定向到OnCreate()而不是onUpgrade(),因为版本是2,或者是OnCreate()和然后 onUpgrade(),或者几乎不可能直接在OnUpgrade()跳过某些API原因甚至onCreate()?
在其他方面,我是否需要更新新列更改旧的onCreate()理解新添加的列?
2)在
之后的onUpgrade()中ALTER <table> ADD <column>
逻辑上我必须创建一个新表吗?我应该将onCreate()作为更新的表调用(例如,而不是原来的4列,现在有5列)?
答案 0 :(得分:2)
调用onCreate
时,它会检查数据库文件。如果它不存在,则调用onUpgrade
。如果它确实存在但版本错误,则会调用onCreate
。
因此onUpgrade
负责创建当前版本的数据库模式,而onCreate
负责将某些现有数据库更改为具有当前版本的模式。
您可以在onUpgrade
和onXxx
之间共享代码,但调用该代码是您自己的责任;在{{1}}回调返回后,框架不会再次检查版本。