Нулевое значение константы SQL в Android - PullRequest
0 голосов
/ 05 марта 2011

У меня есть для вас эта подсказка ...

Мы пытаемся передать аргумент запросу в средстве разрешения содержимого. Мы хотим получить все строки, если аргумент равен 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 голосов
/ 14 марта 2011

Мы решили нашу проблему, сделав выбор следующим образом:

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

Надеюсь, это кому-нибудь еще поможет.Привет! * * 1004

0 голосов
/ 06 марта 2011

Превратить пустые строки в ноль

    String selectionQuery = "? = nullif(?,'''')";
...