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
数据库中有一个错误,有了这些信息,我明白了我在向数据库提交信息时做错了什么
我的查询总是返回比预期少一个结果。最初我有 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数据库中有一个错误,有了这些信息,我明白了我在向数据库提交信息时做错了什么