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
负责更改一些现有数据库以具有该模式当前版本的。
您可以在 onCreate
和 onUpgrade
之间共享代码,但调用该代码是您自己的责任; onXxx
回调返回后,框架将不会再次检查版本。
这是一个微不足道的问题,但我担心在生产环境中放入错误的代码并且在 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
负责更改一些现有数据库以具有该模式当前版本的。
您可以在 onCreate
和 onUpgrade
之间共享代码,但调用该代码是您自己的责任; onXxx
回调返回后,框架将不会再次检查版本。