2016-07-07 7 views
0

私は人が都市を追加したり、都市のページを開いたり、日記を追加したり、最後にテキストを追加することができるtravelappを作成していますこの日付。 sqliteデータベースから都市を削除しようとする場合を除いて、すべて正常に動作します。 都市を削除すると、その都市に関連する日付とハイライトは自動的に削除する必要がありますが、他の都市に関連する日付は自動的に削除する必要があります。複数のテーブルを持つsqliteデータベースの行を削除しても動作しません

メソッドを呼び出した直後に都市、日付、ハイライトがアプリに表示されないため、削除が機能しているようです。しかし、私が旧市街のイドをとり、旧市街にあった日付を追加する新しい都市を作ると、日付は二度表示されます。ハイライトは、実際に削除されているように見えるんので奇妙な..ここでは3つの要素すべて削除するためのコードです:

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の日記が作成されます。私の意見では、これは古いものが実際に削除され、新しいものが追加されたことを意味するはずですが、都市とその日記を削除して追加するほど、古い日記は複製されます... ここに何か不足していますか?

+0

'db.delete(...)'によって返されたものをチェックし、作成されるたびに 'db'オブジェクトを閉じます。 – Luke

+0

@qbeck db.deleteはすべての場合に1を返します。つまり、実際に都市、日記、ハイライトを削除してしまうのですか? dbオブジェクトを作成するたびにクローズするとどういう意味ですか?私が呼び出すすべてのメソッドで閉じるとき.getWritable/.getReadableデータベースそれは私に次のエラーを返します: "既に閉じたオブジェクトを再オープンしようとする:SQLiteデータベース" –

答えて

0

SQLiteDatabaseの複数のテーブルで見つかったチュートリアルを使用しましたが、それは間違っていました。私は、この問題は、ハイライトのIDを日記にリンクしたテーブルと関係があると思っていました。日記は都市にありました。このチュートリアルでは、削除したいIDを含む行は、オブジェクト自体を含むテーブルからのみ削除されました。だから、IDとお互いを結ぶ表は同じままだった。単にdeleteDiary()メソッド、およびdeleteHighlight()メソッドへ

db.delete(TABLE_DIARY_HIGHLIGHT, KEY_HIGHLIGHT_ID+" =?", new String[]{String.valueOf(highlight.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())}); 

 db.delete(TABLE_CITY, KEY_ID+" =?", new String[]{String.valueOf(city.getId())}); 

を追加することによってそれを修正。

関連する問題