2012-10-21 28 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