【问题标题】:SQLite (Android) - Selecting Random RowSQLite (Android) - 选择随机行
【发布时间】:2012-08-29 13:04:58
【问题描述】:

我有一个返回游标的方法,但不幸的是,由于某种原因它产生了 NullPointerException。

方法是这样的,有什么问题吗?:

public Cursor getRandom(String tableName) {
        return db.query(tableName + " Order BY RANDOM() LIMIT 1", new String[] {KEY_ID, KEY_TEXT}, null, null, null, null, null);
    }

【问题讨论】:

  • 唯一的可能性是 tableName == null、KEY_ID == null 或 KEY_TEXT == null。你能实时检查这 3 个吗?

标签: android database sqlite random cursor


【解决方案1】:

order by 语句放错地方了。

SQLiteDatabase.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit).

看看API

【讨论】:

  • 那么我该如何修复查询以匹配这个?
  • 这次你是怎么尝试的?试试这个:return db.query(tableName, new String[] {KEY_ID, KEY_TEXT}, null, null, null, null, "RANDOM()", "1");
  • 它说:只有在使用 groupBy 子句时才允许使用 HAVING 子句
  • 我试过了:return db.query(tableName, new String[] {KEY_ID, KEY_TEXT}, null, new String[] {KEY_ID}, null, "RANDOM()", "1"); 和:return db.query(tableName, new String[] {KEY_ID, KEY_TEXT}, null, null, null, "RANDOM()", "1");
  • 我得到了错误:09-04 22:03:48.403: E/AndroidRuntime(29834): java.lang.IllegalArgumentException: HAVING clauses are only permitted when using a groupBy clause
猜你喜欢
  • 2011-05-06
  • 2019-03-17
  • 2023-04-03
  • 1970-01-01
  • 2015-12-09
  • 2013-07-19
  • 2011-06-30
  • 2010-12-05
  • 2019-02-06
相关资源
最近更新 更多