首页 > 解决方案 > 将 DISTINCT 与 SQLiteDatabase 查询方法一起使用时如何不使用 LIMIT?

问题描述

我想使用SELECT DISTINCT book FROM bible ORDER BY book;SQliteDatabase查询方法使用 SQL,我尝试:-

Cursor csr = mDB.query(true,TABLE_BIBLE,new String[]{COL_BIBLE_BOOK},whereclause,whereargs,null,null,COL_BIBLE_BOOK,"-999");

4 个查询中的两个对 DISTINCT 具有布尔真值,都必须具有 LIMIT 参数。SQLite 表示没有限制,但这样做会产生错误,例如

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.bible/com.example.bible.MainActivity}: java.lang.IllegalArgumentException: invalid LIMIT clauses:-999

我知道您可以使用rawQuery,但不建议从 Android 开发人员指南中使用它。所以想用查询

我也知道你可以使用大量但不好的数字,尽管它可能会混淆。

标签: javaandroidandroid-sqlite

解决方案


SQLite 表示否定无限制

哪里是这么说的?我将文档阅读为:

传递 null 表示没有 LIMIT 子句。

...

我知道您可以使用 rawQuery,但不建议从 Android 开发人员指南中使用它

rawQuery()很好,即使 API 设计者希望您使用更高级的方法来构造 SQL。


SELECT say 如果 LIMIT 表达式的计算结果为负值,则返回的行数没有上限

这是真的,并且适用于原始 sqlite SQL。

如果你使用query(),你会得到额外的验证SQLiteQueryBuilder,抛出你看到的这个异常。查看源代码


推荐阅读