ContentProvider.delete与相关表

时间:2012-10-21 22:11:18

标签: android android-contentprovider

我正在编写一个ContentProvider来处理数据库。在这个数据库中,我有一个“旅行”表和一个“日”表。行程表中的每个记录与日表中的多个记录相关联,即每个行程跨越多天,但任何一天记录只能属于一次行程。如果旅行被删除,那么与之相关的所有日期也必须删除。

我的问题是,删除时从ContentProvider处理此表关系的标准或普遍接受的方法是什么?当我的删除方法获取一个删除特定行程的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;
    }
}

或者只删除所要求的内容,来自应用程序的多次来电以及所需的天数:

@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 个答案:

答案 0 :(得分:1)

  

当我的删除方法获取一个删除特定行程的URI时,是否还要删除相关的日期,还是应该删除行程并要求使用ContentProvider的程序执行删除日期的必要逻辑?

我会投票给前者,也许是使用a FOREIGN KEY relationship within SQLite而不是亲自手动完成。由于白天记录在旅行之外没有生命,删除旅行应该删除那些依赖记录。