[SQL] 내가) (ContentResolver.query이 안드로이드 쿼리를 수행 할 수 있습니까? (LEFT는 가입 CASE)
SQL내가) (ContentResolver.query이 안드로이드 쿼리를 수행 할 수 있습니까? (LEFT는 가입 CASE)
나는 안드로이드에 (의사 코드) 다음과 같은 쿼리를 수행하기 위해 찾고 있어요 :
SELECT C.ID, C.NAME, CASE ISNULL(G.GROUPID,0) = 0 THEN 0 ELSE 1 END INGROUP
FROM CONTACTS C
LEFT JOIN GROUPMEMBERSHIP G ON G.CONTACTID = C.ID AND G.GROUPID = ?
나는과 함께 기본 연락처 컨텐트 프로를 통해, 시스템의 주소록에있는 모든 연락처의 ID와 이름을 선택 찾고 있어요 0/1 필드는 연락처 그룹의 구성원인지 여부를 나타내는? .
내가 할 수 물론 충분히 쉽게 모든 연락처를 얻을 통해 다음 루프 내 어댑터 클래스에서 개별적으로 충분히 쉽게 쿼리 회원하지만, 하나 개의 외부 쿼리가 훨씬 더 나은 성능을 얻을 것입니다 합류로 나는 두 개의 쿼리를 수행 상상할 것입니다.
나는 표준 높은 수준의 문자열 프로젝션 및 ContentResolver.query () 메소드를 사용하여이 작업을 수행 할 수 있습니까? 또는 쿼리의이 종류는 더 직접적인 SQL 실행을 파고 필요?
해결법
-
==============================
1.아니, 여러분은 ContentResolver.query () 메쏘드와 쿼리의 종류를 할 수 없습니다. 당신이 뭔가를 작성해야합니다 :
아니, 여러분은 ContentResolver.query () 메쏘드와 쿼리의 종류를 할 수 없습니다. 당신이 뭔가를 작성해야합니다 :
SQLiteDatabase db = YourActivity.getDbHelper().getReadableDatabase(); String query = yourLongQuery; Cursor c = db.rawQuery(query, null); YourActivity.startManagingCursor(c); c.setNotificationUri(YourActivity.getContentResolver(), YourContentProvider.CONTENT_URI);
-
==============================
2.편집 : 자신의 질문에 언급 된 eidylon은 기존의 컨텐트 프로에 연결되어 있기 때문에 좋아,이 실제로 문제가 해결되지는 물었다. 그러나, 이것은 당신이 컨텐트 프로 소스 및 API를 소유하는 경우가 가입 어떻게 커버를한다. 그래서 나는 그 사건을 처리하는 방법을 알고 싶은 사람들을 위해 떠날거야.
편집 : 자신의 질문에 언급 된 eidylon은 기존의 컨텐트 프로에 연결되어 있기 때문에 좋아,이 실제로 문제가 해결되지는 물었다. 그러나, 이것은 당신이 컨텐트 프로 소스 및 API를 소유하는 경우가 가입 어떻게 커버를한다. 그래서 나는 그 사건을 처리하는 방법을 알고 싶은 사람들을 위해 떠날거야.
이것은 쉬워요! 그러나 직관적 ... :)
query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
좋아, URI 무엇인가? 일반적으로 테이블 당 하나의 URI가 있습니다.
내용 : //com.example.coolapp.contacts 귀하의 연락처 테이블의 데이터를 제공합니다. 내용 : //com.example.coolapp.groupmembers은 GROUPMEMBERSHIP 테이블의 데이터를 제공합니다.
그러나 URI 정말 그냥 문자열입니다. 그것을 사용하지만 당신은 좋아한다. //com.example.coolapp.contacts_in_group : 응답 콘텐츠로 컨텐트 프로 코드 블록을 만듭니다. 컨텐트 프로에서 코드 블록 내에서 제한된 쿼리 () 데이터 모델에 의해 자유로운 당신의 SQLite는 DB에 원시 액세스를 얻을 수 있습니다. 그것을 자유롭게 사용!
당신이 좋아하지만 당신의 선택 필드를 정의합니다. 그들은 테이블 열 이름에 매핑 할 필요가 없습니다 - 당신의 매개 변수를 얻기 위해, 당신이 필요로하는지에 매핑.
조인 후이 두 테이블에서 열을 포함 할 수 있습니다 - 당신이 필요로하는 방법 프로젝션을 정의합니다.
빙, 당신은 완료됩니다. 구글은 자신의 코드에서 내부적으로이 같은 모델을 수행 - 연락처 제공자 API의 이동 모습을 - 당신은 콘텐츠의 URI로 등 "bla.RawContact"와 "bla.Contact"를 참조하십시오. 각각은 DB에서 동일한 테이블 중 데이터를 제공 - 다른 URI를 그냥 같은 테이블의 다른보기를 제공합니다!
-
==============================
3.컨텐트 리졸버는 하나의 쿼리 방법을 가지고 있기 때문에 당신은 할 수 없습니다 :
컨텐트 리졸버는 하나의 쿼리 방법을 가지고 있기 때문에 당신은 할 수 없습니다 :
query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
테이블 또는 FROM 절에는 매개 변수가 없습니다.
from https://stackoverflow.com/questions/6338802/can-i-perform-this-android-query-with-contentresolver-query-left-join-and-ca by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 다른 테이블의 열이 업데이트 될 때 하나 개의 테이블에 열을 업데이트하는 트리거를 생성 (0) | 2020.06.06 |
---|---|
[SQL] "and"와 "여기서"에 조인의 차이 (0) | 2020.06.06 |
[SQL] 번호 또는 간격 데이터 유형 - 오라클의 날짜를 빼면? (0) | 2020.06.06 |
[SQL] (WHERE) 조건으로 선택된 행에서 이전 및 다음 행을 가져옵니다 (0) | 2020.06.06 |
[SQL] 어떻게 테이블 데이터를 반환, 자바 / JSP에서 MS SQL Server 저장 프로 시저를 실행합니까? (0) | 2020.06.06 |