2012-04-25 9 views
1

ContentResolver.queryは選択引数をエスケープしますか?ContentResolver.queryは引数をエスケープしますか、それとも単に疑問符を置き換えますか?

例えば、私は手動で

Cursor c = contentResolver.query(uri, null, "mimetype=?", selArgs, null); 

またはそれがquery方法で行われているような何かを行う前にselArgsで引数をエスケープする必要がありますか?

+0

より多くの私はそれについて考える、より多くの私はそれが* *適切な引数をエスケープしないことを確信しています。 AFAIKの異なるDBMSは、異なるエスケープルーチンを持つことがあります。 'query'コントラクトが特定のDBMSにバインドされていても、それがコンテンツリゾルバをサポートしていたDBMSを知っていることは理解できません。 – aioobe

答えて

0

いいえ、コンテンツプロバイダで手動で行う必要があります。クエリ機能の

ソースコード:

public final Cursor query(Uri uri, String[] projection, 
      String selection, String[] selectionArgs, String sortOrder) { 
     IContentProvider provider = acquireProvider(uri); 
     if (provider == null) { 
      return null; 
     } 
     try { 
      long startTime = SystemClock.uptimeMillis(); 
      Cursor qCursor = provider.query(uri, projection, selection, selectionArgs, sortOrder); 
      if (qCursor == null) { 
       releaseProvider(provider); 
       return null; 
      } 
      // force query execution 
      qCursor.getCount(); 
      long durationMillis = SystemClock.uptimeMillis() - startTime; 
      maybeLogQueryToEventLog(durationMillis, uri, projection, selection, sortOrder); 
      // Wrap the cursor object into CursorWrapperInner object 
      return new CursorWrapperInner(qCursor, provider); 
     } catch (RemoteException e) { 
      releaseProvider(provider); 

      // Arbitrary and not worth documenting, as Activity 
      // Manager will kill this process shortly anyway. 
      return null; 
     } catch (RuntimeException e) { 
      releaseProvider(provider); 
      throw e; 
     } 
    } 
+0

これは別の 'query'関数にクエリを委譲します。 'provider.query'で始まる行を見てください。 'IContentProvider.query'の契約は何ですか? – aioobe

+0

クエリは、指定されたURIを処理できるコンテンツプロバイダに委任されます。あなたはandroid.content.ContentProviderを拡張するコンテンツプロバイダを持っていますか?あなたのウリは何ですか? – Blehi

+0

私は一般的なケースに興味がありますが、特定のシナリオではありません。 (言い換えれば、私の質問には特定のURIが含まれていません) – aioobe

関連する問題