在onUpgrade中备份表时出现_id冲突

时间:2017-06-25 21:53:01

标签: android sqlite android-database

我希望跨数据库结构更改持久保存表数据,因此基本流程如下:

  • 创建临时表
  • 使用主表
  • 中的数据填充临时表
  • drop primary table
  • onCreate()被称为
  • 使用临时表
  • 中的数据填充主表
  • drop temp table

步骤1 - 4按预期执行,但在调用onCreate()后重新填充时,我在def save(self, *args, **kwargs): if self.pk is None: combination = Availability.objects.filter(player=self.player, hour=self.hour).first() if combination: self.pk = combination.pk super(Availability, self).save(*args, **kwargs) 上得到唯一约束异常。

在onUpgrade中,我有以下结构:

primary_table._id

我不明白为什么仅为重新填充主表而抛出异常,而不是在填充临时表时抛出异常。

1 个答案:

答案 0 :(得分:1)

db.execSQL("create table CustomerTemp as select * from Customer;");

此命令创建CustomerTemp表,并将所有行复制到其中。

db.execSQL("insert into CustomerTemp select * from Customer;");

此命令再次复制所有行。 CREATE TABLE AS语句不会重新创建任何约束(例如PRIMARY KEY或UNIQUE),因此重复项不会导致错误。