我正在使用SQLiteDatabase
的查询方法。我需要有关此方法的 orderBy 参数的帮助。
Cursor cursor = sqLiteDatabase.query(tableName, tableColumns, whereClause, whereArgs, groupBy, having, orderBy);
public Cursor getAllCustomexp(int TID) throws SQLException
{
Cursor mCursor =
db.query(false, CEXP_TABLE, new String[] {KEY_CEID, FLD_CETID, FLD_CEEID, FLD_CEMID,
FLD_CEAMT, FLD_CESEL}, FLD_CETID + " = " + TID, null,
null, null, FLD_CEEID, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
问题1:
在上面的查询中,结果集将按FLD_CEEID
按升序或降序排序?
问题2:
如果我需要先按FLD_CEEID
然后按FLD_CEMID
订购结果集,我应该如何按此查询的参数构建订单。
使用此方法可以执行多个订单吗?
答案 0 :(得分:5)
来自SQLite docs:
如果返回多行的SELECT语句没有 ORDER BY子句,返回行的顺序是 未定义。或者,如果SELECT语句确实具有ORDER BY子句, 然后附加到ORDER BY的表达式列表确定 将行返回给用户的顺序。行首先排序 基于评估最左侧表达式的结果 ORDER BY列表,然后通过评估第二个最左边来打破关系 表达等。所有ORDER的两行的顺序 返回的BY表达式求值等值是未定义的。 每个ORDER BY表达式可以可选地后跟一个 关键字ASC(首先返回较小的值)或DESC(较大的值) 值首先返回)。如果既未指定ASC或DESC,则为行 默认情况下按升序排序(较小的值为先)。
答案1:结果集将按升序排序。
答案2:
String orderBy = FLD_CEEID + " ASC, " + FLD_CEMID + " ASC";
db.query(false, CEXP_TABLE, new String[] {KEY_CEID, FLD_CETID, FLD_CEEID, FLD_CEMID,
FLD_CEAMT, FLD_CESEL}, FLD_CETID + " = " + TID, null,
null, null, orderBy, null);
答案 1 :(得分:0)
就像在SQL Select Order By
中一样。您可以在此处找到详细信息:http://en.wikipedia.org/wiki/Order_by_(SQL)。