【发布时间】:2015-06-22 01:30:53
【问题描述】:
我一直在尝试使用 db.query 根据名称按字母顺序返回我的表,并保存为列表以填充微调器。
db.query 确实成功返回了所有列值,但在我尝试排序时没有按任何顺序返回。
我要排序的列是 COLUMN_COMPANY_NAME ("company_name") 属于表 TABLE__NAME("companies")。 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(table, columns, selection, selectionArgs, groupBy, having order) 在游标中获取数据库中的所有列和行:
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 子句规定。我怀疑“期望的顺序”和 实际结果顺序 是不同的。那么实际顺序是什么?显示数据结果。
-
@user2864740 - 这实际上是个问题。目前它按照添加到 SQLite 数据库的顺序返回,但是使用“ORDER BY company_name Collate NOCASE”,返回的顺序不应该是:字母顺序,根据数据库的 company_name 列区分大小写吗?
-
执行时
orderBy字符串的实际值是多少?基本上:SQLite没有损坏,适配器没有能够重新排序结果。因此,生成的 SQL 不符合预期。以“添加到 SQLite 数据库的顺序”返回结果听起来很奇怪 - 例如。要么未应用排序,要么排序在 ID 之类的列上。大小写(或无大小写)顺序应按字母顺序排列,fsvo。 -
@user2864740 - 将字符串 orderBy(我创建的)打印到 logcat,它是“company_name Collate NOCASE”,正如预期的那样。我注意到数据库处理程序已成功按日期时间和 int 重新排序,因此正在调查我的 SQLite 或编译器是否存在问题...
-
我刚刚从git下载了相同的项目到办公室的另一台PC上,编译了代码并将APP安装到了同一部手机上。这次微调器已按正确的字母顺序排序(基于公司名称)...用我的 PC 上的 APK 重新编程 - 列表未按字母顺序排列。正在重新安装 Android Studio 以重试...