1

コンテンツ プロバイダーを使用して最初の "n" 行を削除したいと考えています。

これは私のコードです:

    private void deleteOldItems(int number) {
    String where = HistoryTable.COLUMN_ID + "<=?";
    getContentResolver()
            .delete(Uri.parse("content://com.ipiit.client.contentprovider.HistoryContentProvider/histories"),
                    where, new String[] {String.valueOf(number)});
    }

私は働いていますが、一度だけです。常に最初の行を削除する方法は?

4

2 に答える 2

5

これがあなたの「自分のもの」ContentProviderである場合、つまりテーブル名や同様のものを確信している場合は、次のようにかなり醜い副選択をいつでも行うことができます。

private void deleteOldItems(int number) {
    // You should probably sort the subselect on something
    // suitable indicating its age. The COLUMN_ID should do.
    String where = HistoryTable.COLUMN_ID + " IN (SELECT " + HistoryTable.COLUMN_ID + " FROM " + 
        HistoryTable.TABLE_NAME + " ORDER BY " + HistoryTable.COLUMN_ID + " LIMIT ?)";
    getContentResolver()
        .delete(Uri.parse("content://com.ipiit.client.contentprovider.HistoryContentProvider/histories"),
                where, new String[] {String.valueOf(number)});
}

一方、それがあなた自身のものである場合は、ContentProviderこのような醜いハックに頼るのではなく、#delete(..)に渡すときにURIに「limit」パラメータを追加するためのサポートを追加するだけです。

于 2012-11-15T12:58:42.907 に答える
1

このようなものを試してみてくださいcontentprovider

count = DBConnection.delete("TableName", "_id" + "=" +arg1, arg2);
于 2012-11-15T12:55:24.150 に答える