[英]Deleting row in sqlite database with multiple tables doesn't work
我正在制作一种travelapp,人们可以在其中添加城市,打开城市页面,在此处添加日记日期,最后在该日期之前添加文字(突出显示)。 一切正常,除非我尝试从sqlite数据库中删除城市。 删除城市意味着它必须自动删除与该城市相关的日期以及重点,而不是与其他城市相关的日期。
删除操作似乎确实可行,因为在我调用该方法后,城市,日期和高亮部分没有立即显示在应用程序中。 但是,当我创建一个使用旧城市ID的新城市并添加一个在旧城市中也存在的日期时,该日期将显示两次。 奇怪,因为突出显示实际上确实被删除了。这是删除所有三个元素的代码:
public void deleteCity(City city){
SQLiteDatabase db=this.getWritableDatabase();
List<Diary>diaries=getDiariesByCity(city.getId());
for(Diary diary: diaries){
try{ deleteDiary(diary);
}catch(Exception e){ Log.w(TAG, "There is no diary to delete");
}}
db.delete(TABLE_CITY, KEY_ID+" =?", new String[]{String.valueOf(city.getId())});
Log.i(TAG,"City "+city.getId()+" deleted");
}
public void deleteDiary(Diary diary){
SQLiteDatabase db=this.getWritableDatabase();
try{ deleteHighlight(getHighlightByDiaryId(diary.getId()));
}catch(Exception e) { Log.w(TAG, "There is no highlight to delete");
}
db.delete(TABLE_DIARY, KEY_ID+" =?", new String[]{String.valueOf(diary.getId())});
Log.i(TAG, "Diary "+diary.getId()+" deleted");
}
public void deleteHighlight(Highlight highlight){
SQLiteDatabase db=this.getWritableDatabase();
db.delete(TABLE_HIGHLIGHT, KEY_ID+" =?", new String[]{String.valueOf(highlight.getId())});
Log.i(TAG, "Highlight "+highlight.getId()+" deleted");
}
甚至更陌生的是,日志还告诉我,例如,删除城市后删除具有ID 1的日记,而当我添加新城市时,它会创建具有ID 1的日记。 在我看来,这应该意味着确实删除了旧的日记,并添加了新的日记,但是我删除并添加城市及其日记的次数越多,重复的旧日记就越多...我在这里错过了什么吗?
得到它了! 我使用了在SQLiteDatabase中为多个表找到的教程,但是那是不正确的。 我认为问题应该与表格有关,在表格中我将重点显示的ID链接到日记,将日记链接到城市。 在本教程中,仅从包含对象本身的表中删除了包含我要删除的ID的行。 因此,将ID彼此链接的表保持不变。 只需添加即可解决
db.delete(TABLE_CITY, KEY_ID+" =?", new String[]{String.valueOf(city.getId())});
到deleteCity()方法,
db.delete(TABLE_DIARY_HIGHLIGHT, KEY_DIARY_ID+" =?", new String[]{String.valueOf(diary.getId())});
db.delete(TABLE_CITY_DIARY, KEY_DIARY_ID+" =?", new String[]{String.valueOf(diary.getId())});
到deleteDiary()方法,然后
db.delete(TABLE_DIARY_HIGHLIGHT, KEY_HIGHLIGHT_ID+" =?", new String[]{String.valueOf(highlight.getId())});
到deleteHighlight()方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.