繁体   English   中英

在sqlite数据库中删除具有多个表的行不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM