在Android中更新数据库表而不丢失数据

在Android中更新数据库表而不丢失数据,android,database,sqlite,Android,Database,Sqlite,我有一些关于移动应用程序数据库管理的基本问题。我已经找过了,但找不到我问题的答案 假设我有一个Sports表,其中包含一些对每个用户都相同的运动名称。当用户进行某项运动时,训练将添加到训练表中。因此,训练表对每个用户都是专用的 1。用户手机中的表格 所以,如果我想在运动表中再添加1项运动并发布更新,该怎么办?我可以用onUpgrade方法更新运动表 2。新版运动表 问题:每个人的运动表中的训练表是否根据新的运动表更换电话?(请记住,训练表对于每个用户都是不同的) 我知道这是一个很长的问题,

我有一些关于移动应用程序数据库管理的基本问题。我已经找过了,但找不到我问题的答案

假设我有一个Sports表,其中包含一些对每个用户都相同的运动名称。当用户进行某项运动时,训练将添加到训练表中。因此,训练表对每个用户都是专用的

1。用户手机中的表格

所以,如果我想在运动表中再添加1项运动并发布更新,该怎么办?我可以用onUpgrade方法更新运动表

2。新版运动表

问题:每个人的运动表中的训练表是否根据新的运动表更换电话?(请记住,训练表对于每个用户都是不同的)


我知道这是一个很长的问题,但我想解释一切。提前感谢。

当您更新数据库的架构时,而不是在向现有表添加更多数据时,将调用SqlOpenHelper的
OnUpgrade
方法。我想你可以用它来编辑你的数据,但对我来说,这似乎是一种很奇怪的方式

架构更改如下所示:

  • 将列添加到表中
  • 添加一个表
  • 从表中删除一列。 等等
OnUpgrade
中运行的任何代码都将决定设备上数据库的结构。这完全取决于你


此外,将数据添加到运动表中不会影响训练表(假设您没有使用触发器)

DB版本更改时,将调用onUpgrade方法。我不是在问。如果我在Sports table上进行了更改并升级了DB版本,然后再次发布我的应用程序,那么“训练表”是否会自行更改?因为没有办法在每个人的手机上改变不同的桌子。是的,这是正确的。我的意思是,当您更改模式时,而不是添加数据时,应该更改DB版本。只有当你改变它时,运动表才会改变。我想我理解你现在的要求。不应更改主键。设置后,它应始终保持不变,尤其是在primarykey\foreignkey关系中使用时。如果要向表中添加新行,请使用当前未使用的新键添加该行。不要更改所有其他键,否则可能会给自己带来无尽的问题。请参阅:当从Sports中删除一行时,您也可以在事务中手动删除所有匹配的行,或者您可以查看链接,但这次请查找“删除时的
”部分。