如何使用内容提供程序删除第一个"n"行

Daw*_*yży 1 sqlite android android-contentprovider

我想使用内容提供程序删除第一个"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)});
    }
Run Code Online (Sandbox Code Playgroud)

我工作但只有一次.如何始终删除第一行?

Jen*_*ens 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)});
}
Run Code Online (Sandbox Code Playgroud)

另一方面,如果它是你自己的ContentProvider..只需添加支持在向URI添加"limit"参数时将其传递给#delete(..),而不是诉诸于像这样丑陋的黑客.