我正在制作某种travelapp,人们可以在其中添加城市,打开城市页面,在那里添加日记日期并最后添加文本(突出显示)这个日期。 一切工作正常,除非当我尝试从sqlite数据库中删除一个城市。 删除城市意味着它会自动删除与该城市相关的日期以及亮点,但不会删除与其他城市相关的日期。在多个表中删除sqlite数据库中的行不起作用
删除似乎工作,因为城市,日期和突出显示在我调用方法后不直接显示在应用程序中。但是,当我建造一个新的城市,并且在旧城区添加一个日期时,该日期会显示两次。奇怪,因为实际上的亮点似乎被删除..下面是删除所有三个要素代码:
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的日记。在我看来,这应该意味着旧的日记确实被删除了,并且新的日记被添加了,但是我删除并添加了一个城市和日记的日子越多,旧日记的重复越多... 我在这里错过了什么吗?
检查'db.delete(...)'返回的内容,并在每次创建时关闭'db'对象。 – Luke
@qbeck db.delete在所有情况下返回1,这意味着它实际上删除了城市,日记和突出显示的权利?每次创建它时关闭数据库对象意味着什么?因为当我在每一个调用.getWritable/.getReadable数据库的方法中关闭它时,它会给我提供以下错误:“尝试重新打开已关闭的对象:SQLite数据库” –