2011-11-23 2 views
1

우리는 Uri를 사용하지 않고 데이터베이스에 데이터를 삽입 할 수 있습니다. 그러나 contentResolver를 사용할 때 우리는 아무것도하지 말아야합니다.왜 콘텐츠 제공자는 URI가 아닌 데이터베이스를 사용합니까?

Like getContentResolver().insert(CONTENT_URI, values); 그러나 데이터베이스 쿼리 실행시 우리는 Uri가 필요하지 않습니다. db.execSQL(String query);처럼. 왜 이런거야?

+1

그래서 무엇이 문제입니까? –

+0

투표를 닫으면 질문을 찾을 수 없습니다 ... – WarrenFaith

+0

질문은 왜 우리가 .insert() 대 execSQL을 사용하는지 생각합니다. –

답변

1

나는이 질문이 막 닫혀 있다고 생각하지만, 당신이 요구하는 것은 콘텐츠 확인자를 사용할 때 CONTENT_URI를 사용해야하지만 왜 데이터베이스를 사용하면 안되는 것입니까?

Content Provider

내용 리졸버 그냥 데이터베이스보다

정보 제공자 저장소를 더 많은 기능을 제공하고 데이터를 검색하고 모든 응용 프로그램 가 액세스 할 수 있도록 만들 때문이다

. 그들은 응용 프로그램에서 데이터를 공유 할 수있는 유일한 방법입니다. 모든 안드로이드 패키지 에 액세스 할 수있는 공통 저장소 영역은 없습니다.

안드로이드는 공통 데이터 유형 (오디오, 비디오, 이미지, 개인 연락처 정보 등)에 대한 다수의 컨텐츠 제공 업체와 함께 제공됩니다. 은 android.provider 패키지에 나열된 일부를 볼 수 있습니다. 에 이러한 공급자에 포함 된 데이터를 쿼리 할 수 ​​있습니다 (일부 경우 ). 데이터를 읽을 수있는 적절한 권한을 얻어야합니다.

쿼리가 시작되면 Android 시스템에서 쿼리 대상인 콘텐츠 제공자를 확인하고 최대 이고 실행 중인지 확인합니다. 데이터베이스와

데이터베이스

, 그것은 콘텐츠 제공 업체를 통해 응용 프로그램 (당신이 하나를 작성하지 않은 경우)에서 액세스 할 수 없습니다. db.execSQL을 사용하면 데이터베이스를 쿼리 할뿐 컨텐츠 공급자는 쿼리하지 않으므로 CONTENT_URI를 제공 할 필요가 없습니다. db 개체는 데이터 저장소입니다.

1

Content providers은 execSQL을 사용하는 것보다 훨씬 강력합니다 (예 : SQL보다 훨씬 더 많은 것을 액세스 할 수 있습니다) (예 : SQL 주입 공격에 개방).

이것은 싼 대답입니다. 저는 이것을 지원할 수있는 몇 가지 문서를 찾을 수 있습니다. 나는 계속해서 링크를 찾을거야.

+0

모든 쉬운 질문은 닫혀 있거나, 빨리 대답하거나, 질문자가 답을 표시하지 않습니다. 편집은 포인트를 얻을 수있는 유일한 방법입니다. (나는 닫힌 질문이 얼마나 많은지 잘 모르겠지만, 나는 1 % 롤이라고 생각합니다. –

관련 문제