我正在开发一个应用程序,它将所有内容存储在数据库中,并使用ContentProvider进行访问。我的方案如下:
我使用以下选择调用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默认排序。我的问题是,有没有人知道阻止这种情况发生的方法?
答案 0 :(得分:1)
它不是默认为_id
,它正在为您提供数据库中的记录(碰巧按ID排序)。如果您不想要这个,请通过自己的排序顺序。
答案 1 :(得分:1)
当您从任何数据库中选择行而不指定ORDER BY子句时,您应该将结果的顺序视为未定义,即它可以以任何顺序返回。你在这里看到它按_id排序的原因仅仅是由于环境 - 它们很可能在底层数据库文件中按顺序排列,这就是SQLite读回来的顺序。但是,假设总是这样做是不安全的。是的。
因此,您的问题的实际答案是否定的,您不能假设SQLite将在没有ORDER BY子句的情况下以任何特定顺序返回您的行。如果您无法提供这样的条款(这里似乎是这种情况),您必须在从光标获取所有数据后在代码中对它们进行排序。