【发布时间】:2016-11-09 23:29:05
【问题描述】:
我正在制作某种旅行应用程序,人们可以在其中添加城市,打开城市页面,在那里添加日记日期,最后在该日期添加文本(突出显示)。 一切正常,除非我尝试从 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 的日记已创建。在我看来,这应该意味着确实删除了旧的并添加了新的,但是我删除并添加的城市及其日记越多,旧日记的重复就越多…… 我在这里遗漏了什么吗?
【问题讨论】:
-
检查
db.delete(...)返回的内容,并在每次创建db对象时关闭它。 -
@qbeck db.delete 在所有情况下都返回 1,这意味着它实际上删除了城市、日记和突出显示,对吗?每次创建 db 对象时都关闭它是什么意思?因为当我在调用 .getWritable/.getReadable 数据库的每个方法中关闭它时,它会给我以下错误:“尝试重新打开已经关闭的对象:SQLite 数据库”
标签: android database eclipse sqlite methods