ContentProvider / ContentResolver查询默认情况下按ID排序

时间:2013-11-20 15:23:05

标签: android sqlite

我正在开发一个应用程序,它将所有内容存储在数据库中,并使用ContentProvider进行访问。我的方案如下:

  • 我进行Web调用并接收一个整数列表,这些整数表示我需要从设备上的数据库中检索的对象的ID。
  • 我使用以下选择调用ContentResolver.query():

    选择:_id =?或_id =?或_id =?

    选择指标:30; 165; 149;

  • 所以,我需要获取ID为30,165或149的所有项目。我需要按照确切的顺序

这是我在ContentResolver上进行的确切调用:

Cursor cursor = mActivity.getContentResolver().query(myUri, null, selection, selectionIds, null);

如你所见,我没有传递任何排序。但是,结果给了我一个Cursor,其顺序如下:30,149,165。因此,即使我没有指定任何排序顺序,它仍然是_id默认排序。我的问题是,有没有人知道阻止这种情况发生的方法?

2 个答案:

答案 0 :(得分:1)

它不是默认为_id,它正在为您提供数据库中的记录(碰巧按ID排序)。如果您不想要这个,请通过自己的排序顺序。

答案 1 :(得分:1)

当您从任何数据库中选择行而不指定ORDER BY子句时,您应该将结果的顺序视为未定义,即它可以以任何顺序返回。你在这里看到它按_id排序的原因仅仅是由于环境 - 它们很可能在底层数据库文件中按顺序排列,这就是SQLite读回来的顺序。但是,假设总是这样做是不安全的。是的。

因此,您的问题的实际答案是否定的,您不能假设SQLite将在没有ORDER BY子句的情况下以任何特定顺序返回您的行。如果您无法提供这样的条款(这里似乎是这种情况),您必须在从光标获取所有数据后在代码中对它们进行排序。