0

特定のアティストのアルバム数を返すために、メディアストアでクエリを実行しています。

クエリは次のようになります。

    public String doQuery(String artistName) {

        String[] proj = new String[] { MediaStore.Audio.Artists._ID,
                MediaStore.Audio.Artists.NUMBER_OF_ALBUMS,
                MediaStore.Audio.Artists.ARTIST };

        Uri baseUri = MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI;

        selection = MediaStore.Audio.Artists.ARTIST + " = " + artistName;
        Log.i(TAG, "Selection artistName = " + artistName);

        Cursor mCursor = getContentResolver().query(baseUri, proj, selection,
                null, null);

        mCursor.moveToFirst();

        return

        mCursor.getString(mCursor
                .getColumnIndex(MediaStore.Audio.Artists.NUMBER_OF_ALBUMS));

    }

ArtistNameが渡され、選択するとカーソルがそのアーティストのみに絞り込まれます。次の例外が発生します。

09-19 23:13:14.855: E/AndroidRuntime(17911): android.database.sqlite.SQLiteException: near "Stone": syntax error (code 1): , while compiling: SELECT _id, number_of_albums, artist FROM artist_info WHERE (artist = Nine Inch Nails)

誰かが私が間違っていることを教えてもらえますか?

4

1 に答える 1

3

以下をせよ:

selection = MediaStore.Audio.Artists.ARTIST + " =? ";
String[] selectionArgs = new String[]{artistName};
Cursor mCursor = getContentResolver().query(baseUri, proj, selection,
                selectionArgs, null);

このようartistNameに、単一引用符が含まれていても、エラーなしで実行されます。

于 2012-09-19T13:29:01.997 に答える