Android SQLiteDatabase WHERE选择

时间:2017-01-29 22:19:25

标签: android sqlite where-clause

我使用在线笔记教程做笔记。它有效,但我想根据选择做笔记。我以为我做对了,但有人可以向我解释我做错了什么吗?我正在传递课程代码,我认为我将其设置为正确选择。告诉我我需要做什么。

这段代码似乎是个问题。如果selectionargs和where为null,则返回所有音符。我想将where语句返回所有注释为WHERE courseCode = thisCourse.getCourseID()我该怎么做?

(DBOpenHelper.NOTE_COURSE是courseCode)

@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    String whereClause = DBOpenHelper.NOTE_COURSE+"=?";
    String[] selectionArgs = { thisCourse.getCourseID().trim() };
    return new CursorLoader(this, NotesProvider.CONTENT_URI, null, whereClause, selectionArgs, null);
}

2 个答案:

答案 0 :(得分:1)

  

如果selectionargs和where为null,则返回所有音符

如果您想从表中选择NOTE_COURSE为空的行,则必须使用IS NULL

String whereClause = DBOpenHelper.NOTE_COURSE + " IS NULL";

注意:它不是参数值!

修改

Where子句用于限制返回的数据,因此它是可选,如果没有指定特殊的where子句,则所有行都与查询匹配。这是您传递null时发生的情况,因为您只是告诉“我不想要行文件”,因此返回所有行。

此外,您的代码看起来还不错,但我不确定您为设置trim()而致电selectionArgs

答案 1 :(得分:0)

答案很简单,让我觉得非常愚蠢。您需要通过在它们周围添加单引号来使参数SQL准备就绪,如本例所示。

 @Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    String whereClause = DBOpenHelper.NOTE_COURSE+" LIKE " + "'"+thisCourse.getCourseID()+"'";
    return new CursorLoader(this, NotesProvider.CONTENT_URI, null, whereClause, null, null);
}