2010-12-26 5 views
4

사용자 정의 ContentProvider에서 입력에 지정된 일부 열을 필터링해야합니다. 텍스트 지향 안드로이드 인터페이스를 감안할 때 이것은 나에게 힘든 시간을줍니다. 문제는이 특정 MyContentProvider _column_b_에서 이해가되지 않을 수도 있습니다 테이블에 존재하지 않을 것입니다사용자 정의 ContentProvider 함수의 입력 필터링

SELECT column_a, column_b FROM my_table WHERE column_a=1 AND column_b=red; 

:

예를 들어 MyContentProvider.query()의 입력을 효과적으로 같은 것을 요청할 것입니다. 관련 열만 남아 있도록 투영을 필터링하면 String []이기 때문에 쉽게 완료 할 수 있습니다. 그러나이 열에 대해 문자열 "where"(선택) 및 "selectionArgs"입력을 필터링하는 것은 쉬운 일이 아닙니다. 올바르게 완료되면 다음과 같이됩니다.

SELECT column_a FROM my_table WHERE column_a=1; 

그렇지 않으면 SQLiteException "no such column"이됩니다.

해당하는 SQL 문에서 열을 무시하거나 필터링하는 쉬운 방법이 있습니까? 아니면 선택 부분에 대해 매우 한정된 regexp 구문 분석 코드를 사용하지만 스마트를 작성해야합니까? 내가 해결하기 위해 인터페이스로 사용자 정의 ContentProvider을 유지하기 때문에

내가 올바른 입력을받지 못했습니다 이유는,하지만 난 (배경)에 ContentProvider의 여기에 여러 사용자에게 문의하십시오. 한 가지 방법이나 다른 방법으로, 어딘가에서 선택을 필터링해야합니다.

쿼리를 수행하는 방법이나 SELECT ... WHERE 문을 사용하는 방법은 간단하지 않습니다. 그러나 그것은 query() 함수의 구현과 관련이 있습니다.

답변

0

MyContentProviderContentProvider으로 확장 했으므로 query() 메서드를 오버로드하지 않는 이유는 무엇입니까?

예를 들어, 사용자 정의 ContentProvider를 작성하는 방법에 대한 예는 elses ContentProvider - Sharing Content using the ContentProvider을 참조하십시오. SQLiteDatabase에서 가져온 데이터를 완전히 제어 할 수 있어야합니다.

더 중요한 것은 arguments provided에서 query()까지가 메소드 호출로 전달되는 것에서 쿼리를 동적으로 빌드 할 수있는 방법으로 필요한 정보를 포함하고 있기 때문입니다.

좋은 쿼리 작성기를 찾을 수 있는지 여부에 따라 작지만 강력한 추상화 계층을 작성하여 쿼리를 작성할 수 있으므로 직접 작성하는 실제 SQL의 양을 최소화 할 수 있습니다.

또한 입력 내용을 항상 소독하십시오.

+0

저는 이미 이것을하고 있습니다. 내 질문은 이것 저쪽에있다. – pjv

관련 문제