SQL 查询返回的结果比预期少一个

SQL query is returning one result less than expected

我的查询总是返回比预期少一个结果。最初我有 6 行需要返回,它一直只返回 5 行,我决定添加另一行,现在它返回 6 行而不是 7 行,它总是最后一行。 我在 SQLite Admin 中测试了相同的查询,它工作得很好。

Cursor cursor = database.rawQuery("SELECT DISTINCT * FROM Activities JOIN 
       UserMakesActivities ON UserMakesActivies.ActivityID = 
       Activities.intID WHERE UserMakesActivies.UserID = " + ID, null);

欢迎任何想法。如果由于某种原因 sql 不正确,那是因为我更改了它以使其在此处更清楚。

编辑:根据要求,这是我移动光标的地方。

    cursor.moveToFirst();
    Log.i("tag", "contagem " + cursor.getCount());
    while (!cursor.isAfterLast()) {
        Atividade atividade = cursorToAtividade(cursor);
        atividades.add(atividade);
        cursor.moveToNext();
    }

private static Atividade cursorToAtividade(Cursor cursor) {
    Atividade atividade = new Atividade();
    atividade.setNum(cursor.getInt(0));
    atividade.setNome(cursor.getString(1));
    atividade.setInformacao(cursor.getString(2));
    atividade.setAtividadeFeita((cursor.getInt(3) == 1) ? true : false);
    atividade.setAtividadeMonitorada((cursor.getInt(4) == 1) ? true :    false);
    atividade.setTempo(cursor.getInt(5));
    atividade.setTipo(cursor.getString(6));
    return atividade;
}

这可能无法解决您的问题,但我发现其中有一些可疑之处。

首先,最好使用 selectionArgs 进行查询:

String[] selectionID = new String[] {ID};
Cursor cursor = database.rawQuery("SELECT DISTINCT * FROM Activities JOIN 
       UserMakesActivities ON UserMakesActivies.ActivityID = 
       Activities.intID WHERE UserMakesActivies.UserID = ?", selectionID );

还要确保关闭光标以避免内存泄漏。

  if (cursor != null){
    Log.i("tag", "contagem " + cursor.getCount());
    for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
        Atividade atividade = cursorToAtividade(cursor);
        atividades.add(atividade);

    }
   cursor.close();
   }

经过一些研究,我找到了一种使用 SQLite Manager 插件检查我的数据库的方法,我从 here

获得了 android

数据库中有一个错误,有了这些信息,我明白了我在向数据库提交信息时做错了什么