Android SQL Null常量值

时间:2011-03-05 19:08:14

标签: android sql cursor android-contentresolver

我有这个问题......

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

非常感谢。

2 个答案:

答案 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);

希望这有助于其他任何人。 问候!