0

我有这个提示给你...

我们正在尝试将参数传递给内容解析器中的查询。如果参数为 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 值而不是“”的方式声明常量?

非常感谢。

4

2 回答 2

0

将空字符串变为 null

    String selectionQuery = "? = nullif(?,'''')";
于 2011-03-05T22:51:05.980 回答
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);

希望这对其他人有帮助。问候!

于 2011-03-14T00:38:01.207 回答