2017-01-29 6 views
-1

ノートを作成するためにオンラインノートを使用しました。それは動作しますが、私は選択に基づいてノートを作りたいと思います。私はそれを正しかったと思ったが、誰かが私が間違っていることを私に説明することができますか?私はコースコードを渡しているので、正しく選択するように設定したと思った。私が何をする必要があるか教えてください。Android SQLiteDatabase WHERE選択

このコードは問題があるようです。 selectionargsとwhereがnullの場合、すべてのノートを返すことで動作します。どこのステートメントでどこのノートを返すかは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); 
} 

答えて

1

selectionargs、どこがnullの場合、あなたがNOTE_COURSEがどこにあるかあなたのテーブルから行を選択したい場合は、それはすべてのノートに

を返すことで動作しますnullを使用する必要があります。IS NULL

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

注:引数値ではありません!句が限界に使用さ

EDIT

は、データを戻し、そのようには任意と句が指定される特別な場合、すべての行がクエリに一致します。 nullを渡すと、「私は行がファイル化されたくない」と単純に伝えるので、すべての行が返されます。

また、あなたのコードは、selectionArgsを設定するためにtrim()と呼んでいるかどうかはわかりません。

+0

は私が意味します。 I. 'return new CursorLoader(this、NotesProvider.CONTENT_URI、null、null、null、null);'どこにIDを追加したいのですが、CursorLoaderコンストラクタでそれを行う方法がわかりません。 – HelixTitan

+0

編集された答えを確認してください。 –

0

答えは簡単で、とても馬鹿だと感じさせてくれます。この例のように、パラメータの周囲に一重引用符を追加して、パラメータSQLを準備する必要があります。私はそれがすべてのノートを返しwhereClause selectionArgsを呼び出すとは対照的に、機能CursorLoaderパラメータにnullを使用する場合

@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); 
}