2012-10-21 54 views
0

我正在寫一個ContentProvider來處理數據庫。在這個數據庫中,我有一個「旅行」表和一個「日子」表。旅程表中的每個記錄都與日表中的多個記錄相關聯,即每個旅程跨越多個天,但是任何一天記錄可以僅屬於一個旅程。如果一次旅行被刪除,那麼所有與它相關的日子都必須被刪除。ContentProvider.delete與相關表格

我的問題是,刪除時,從ContentProvider處理此表關係的標準或普遍接受的方法是什麼?當我的delete方法得到一個URI來刪除一個特定的旅程時,它是否也應該刪除關聯的日子,或者它是否應該刪除旅程並要求使用ContentProvider的程序執行刪除這些日子的必要邏輯?

刪除全部一次,從與行程ID應用程序調用一次刪除:

@Override 
public int delete(Uri uri, String selection, String[] selectionArgs) 
{ 
    SQLiteDatabase db; 
    int count; 

    db = _dbHelper.getWritableDatabase(); 
    switch(uriMatcher.match(uri)) 
    { 
     case TRIP_ID: 
      count = db.delete(TRIP_TABLE, KEY_TRIP_ID + "=?", new String[]{ uri.getLastPathSegment() }); 
      count += db.delete(DAY_TABLE, KEY_TRIP_ID + "=?", new String[]{ uri.getLastPathSegment() }); 
      return count; 
    } 
} 

Or的要求到底是什麼,因爲只需要從與旅行,儘可能多天應用中的多個電話刪除:

@Override 
public int delete(Uri uri, String selection, String[] selectionArgs) 
{ 
    SQLiteDatabase db; 
    int count; 

    db = _dbHelper.getWritableDatabase(); 
    switch(uriMatcher.match(uri)) 
    { 
     case TRIP_ID: 
      count = db.delete(TRIP_TABLE, KEY_TRIP_ID + "=?", new String[]{ uri.getLastPathSegment() }); 
      return count; 
     case Day_ID: 
      count = db.delete(DAY_TABLE, KEY_DAY_ID + "=?", new String[]{ uri.getLastPathSegment() }); 
      return count; 
    } 
} 

回答

1

當我刪除方法獲取一個URI來刪除特定行,應該也刪除相應的天,它應該只是刪除了行程,並要求使用的ContentProvider做必要的日誌程序還刪除了幾天?

我會投票給前者,也許使用a FOREIGN KEY relationship within SQLite而不是手動自己做。由於白天記錄在行程之外沒有生命,因此刪除行程應刪除這些從屬記錄。

+0

太棒了!我不知道有外鍵這樣的事情,這只是一種嗜好,這種缺點。很好地解決了我的困境,謝謝。 – Ralgha