SQL查询返回的结果少于预期

时间:2015-03-06 16:45:37

标签: android android-sqlite

我的查询不断返回一个比预期更少的结果。最初我有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;
}

2 个答案:

答案 0 :(得分:0)

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

首先,最好将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();
   }

答案 1 :(得分:0)

经过一番研究后,我找到了一种方法来检查我的数据库使用SQLite管理器插件为我从here获得的

数据库中出现错误,我知道在向数据库提交信息时我做错了什么