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

时间:2016-07-07 15:04:51

标签: android database eclipse sqlite methods

我正在制作某种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的日记。在我看来,这应该意味着旧的确实被删除,并添加了一个新的,但我删除和添加一个城市及其日记越多,旧日记复制得越多...... 我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:0)

知道了!我在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()方法。