我有这个问题......
我们正在尝试将参数传递给内容解析器中的查询。如果参数为NULL,我们希望获取所有行,或者将参数中指示的特定值反义为。
我们使用的方法声明:
static String allArtists = "";
////
Some code
...
Vector<String> discs = new Vector<String>();
discs = getDiscs(allArtists);
////
public Vector<String> getDiscs(String artistName){
因此,我们所做的查询如下:
Uri discsUri = MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI;
ContentResolver contRes = getContentResolver();
String[] queryColumns = { MediaStore.Audio.Albums._ID,
MediaStore.Audio.Albums.ALBUM,
MediaStore.Audio.Albums.ARTIST };
String selectionQuery = "? = ?";
String [] selectionArgs = { MediaStore.Audio.Albums.ARTIST, artistName };
String sortOrderClause = MediaStore.Audio.Albums.ALBUM + " ASC";
Cursor queryRes = contRes.query(discsUri,
queryColumns,
selectionQuery,
selectionArgs,
sortOrderClause
);
为了使这个方法可重用,我们将artistName作为参数传递,因为我们希望选择所有行,所以我们传递常量allArtists。
关键是此查询不返回任何行,因为常量allArtists =“”不会像我们预期的那样充当空值。
最后的问题是:如何以查询将其作为NULL值而不是“?”的方式声明常量?
非常感谢。
答案 0 :(得分:0)
将空字符串变为空
String selectionQuery = "? = nullif(?,'''')";
答案 1 :(得分:0)
我们解决了以这种方式进行选择的问题:
String[] queryColumns = { MediaStore.Audio.Albums._ID,
MediaStore.Audio.Albums.ALBUM,
MediaStore.Audio.Albums.ARTIST };
String selectionQuery = "( nullif('" + artistName + "','') ISNULL )" +
" OR (" + MediaStore.Audio.Albums.ARTIST + " == '" + artistName + "' )";
String sortOrderClause = MediaStore.Audio.Albums.ALBUM + " ASC";
Cursor queryRes = contRes.query(discsUri,
queryColumns,
selectionQuery,
null,
sortOrderClause);
希望这有助于其他任何人。 问候!