【问题标题】:Why doesn't my SQLite cursor return in alphabetical order? (Android)为什么我的 SQLite 游标不按字母顺序返回? (安卓)
【发布时间】: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

How do I order my SQLite in descending order

SQLite query sorting

【问题讨论】:

  • 按返回的 SQL 的顺序返回 - 由 ORDER BY 子句规定。我怀疑“期望的顺序”和 实际结果顺序 是不同的。那么实际顺序是什么?显示数据结果。
  • @user2864740 - 这实际上是个问题。目前它按照添加到 SQLite 数据库的顺序返回,但是使用“ORDER BY company_name Collat​​e NOCASE”,返回的顺序不应该是:字母顺序,根据数据库的 company_name 列区分大小写吗?
  • 执行时orderBy字符串的实际值是多少?基本上:SQLite没有损坏,适配器没有能够重新排序结果。因此,生成的 SQL 不符合预期。以“添加到 SQLite 数据库的顺序”返回结果听起来很奇怪 - 例如。要么未应用排序,要么排序在 ID 之类的列上。大小写(或无大小写)顺序应按字母顺序排列,fsvo。
  • @user2864740 - 将字符串 orderBy(我创建的)打印到 logcat,它是“company_name Collat​​e NOCASE”,正如预期的那样。我注意到数据库处理程序已成功按日期时间和 int 重新排序,因此正在调查我的 SQLite 或编译器是否存在问题...
  • 我刚刚从git下载了相同的项目到办公室的另一台PC上,编译了代码并将APP安装到了同一部手机上。这次微调器已按正确的字母顺序排序(基于公司名称)...用我的 PC 上的 APK 重新编程 - 列表未按字母顺序排列。正在重新安装 Android Studio 以重试...

标签: android database sqlite


【解决方案1】:

如果您尝试按字母顺序列出它
只需 SELECT * FROM Companies ORDER BY company_name

【讨论】:

  • @Agapitz- 这也不起作用,看起来是一样的。看来整数和日期时间的排序工作正常,因为我在同一个项目中有另一个数据库,它按“票”创建时间和“票”收据编号(一个整数)排序​​。
  • 您是否尝试在 sqlitedatabase 浏览器中运行它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-07
  • 2022-06-11
  • 2013-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多