SQLiteDatabase.query を使用してクエリを作成するにはどうすればよいですか?
"Select * from table where col1 = something AND col2 IS NOT NULL"
col2 に =? を付けて試してみました。選択文字列で、選択引数でNOT NULLですが、機能しません。
どこが間違っているのか教えてください。
selectionArgs
文字列の配列であり、文字列値にのみ使用できます。
col2 = ?
stringを使用すると、NOT NULL
列の値が 8 文字の string であるかどうかを確認するようにデータベースに指示します"NOT NULL"
。
文字列col2 IS NOT NULL
に直接書き込む必要があります。selection
db.query("MyTable", null,
"col1 = ? AND col2 IS NOT NULL",
new String[] { "something" },
null, null, null);
public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)
指定されたテーブルをクエリし、結果セットに対して Cursor を返します。
パラメータ table クエリをコンパイルする対象のテーブル名。
columns
返す列のリスト。null を渡すとすべての列が返されますが、使用されないストレージからのデータの読み取りを防ぐために推奨されません。
selection
SQL WHERE 句としてフォーマットされた、返される行を宣言するフィルター (WHERE 自体を除く)。null を渡すと、指定されたテーブルのすべての行が返されます。
selectionArgs
?s を選択に含めることができます。これは、選択に表示されるために、selectionArgs からの値に置き換えられます。値は文字列としてバインドされます。
groupBy
SQL GROUP BY 句 (GROUP BY 自体を除く) としてフォーマットされた、行をグループ化する方法を宣言するフィルター。null を渡すと、行はグループ化されません。
having
フィルターは、カーソルに含める行グループを宣言します。行のグループ化が使用されている場合は、SQL HAVING 句としてフォーマットされます (HAVING 自体を除く)。null を渡すと、すべての行グループが含まれます。これは、行のグループ化が使用されていない場合に必要です。
orderBy
SQL ORDER BY 句としてフォーマットされた行の順序付け方法 (ORDER BY 自体を除く)。null を渡すと、デフォルトの並べ替え順序が使用されますが、順序付けされていない場合があります。
だからあなたはこのように試すことができます
String[] args = { "first string", "second@string.com" };
Cursor cursor = db.query("TABLE_NAME", null, "name=? AND email=?", args, null,null,null);
あなたが使用することができCursor
ますrawQuery
Cursor c=db.rawQuery(your_query,null)