我一直試圖根據名稱按字母順序使用db.query返回我的表,並另存爲列表以填充微調器。爲什麼我的SQLite遊標不按字母順序返回? (Android)
db.query確實成功返回所有列值,但在嘗試排序時不會以任何順序返回。
我想排序的列是COLUMN_COMPANY_NAME(「company_name」)屬於表TABLENAME(「公司」)。 COLUMN_COMPANY_NAME被宣佈爲:
public static final String TABLE_NAME = "companies";
public static final String COLUMN_ID = "company_id";
public static final String COLUMN_COMPANY_NAME = "company_name";
public static final String COLUMN_EMAIL = "company_email";
public static final String COLUMN_PHONE = "company_phone";
private static final String DATABASE_CREATE = "create table " + TABLE_NAME
+ "(" + COLUMN_ID + " integer primary key autoincrement, "
+ COLUMN_COMPANY_NAME + " varchar(45), "
+ COLUMN_EMAIL + " varchar(45), "
+ COLUMN_PHONE + " integer default 0"
+ ");";
private SQLiteDatabase db;
我想用db.query(表,列,選擇,selectionArgs兩個,GROUPBY,有順序)來獲得在遊標數據庫中的所有列和行:
protected Cursor Cursor_getAllCompanies(){
String orderBy = COLUMN_COMPANY_NAME + " Collate NOCASE";
return db.query(TABLE_NAME, null, null, null, null, null, orderBy);
}//if columns = null, default get all columns
所以我預計rawQuery是:
SELECT * FROM companies ORDER BY company_name Collate NOCASE;
我已經嘗試了許多不同的語法,但無濟於事。據我所知,上面的語法應該以公司名稱的字母順序(升序)返回所有列,但不是。
問題歸結爲:我怎樣才能讓db.query以字母順序返回?爲什麼標準訂單命令不起作用?
注:有一些已經回答過類似的問題,但沒有自己的解決方案,目前似乎爲我工作:
SQLite Query, Nocase Alphabetical
它*將*按返回的SQL順序返回 - 按ORDER BY子句的規定。我懷疑'希望的順序'和*實際結果順序*是不同的。那麼* actual *命令是什麼?顯示數據結果。 – user2864740
@ user2864740 - 這實際上是個問題。目前它是按照它添加到SQLite數據庫的順序返回的,但使用「ORDER BY company_name Collate NOCASE」不應該返回的訂單應該是:按字母順序排列,基於數據庫的company_name列的情況無關緊要? – Luke
執行時'orderBy'字符串的實際值是多少?基本上:SQLite不*損壞,適配器* *不能*重新排序結果。因此,生成的SQL根據預期不正確。以「它添加到SQLite數據庫的順序」返回結果聽起來很奇怪 - 例如。要麼不應用排序,要麼排序在像ID這樣的列上。案例(或無案例)的順序應該是按字母順序排列的,fsvo。 – user2864740