2012-09-13 4 views
0

캐시 된 이름으로 통화 기록을 정렬하고 싶습니다. 캐시 된 이름은 null 일 수 있습니다. 캐시 된 이름이 null 인 경우 별칭에 대한 전화 번호를 갖고 싶습니다.안드로이드 - 존재하는 경우 캐시 된 이름으로 호출 정렬 (sqlite에서 ifnull 사용)

sqlite에는 ifnull() 함수가 있습니다.

String[] projections = new String[] { Calls._ID, Calls.NUMBER, Calls.DATE, Calls.TYPE, Calls.DURATION, "ifnull("+Calls.CACHED_NAME+","+Calls.NUMBER+") as display_name" }; 

Cursor cursor_call = ctx.getContentResolver().query(URI_CALL_LOGS, 
        projections, 
        null, 
        null, 
        null); 

하지만 난 IFNULL 내 사용에 오류가하는 I는이 함수의 샘플을 찾을 수 없습니다 : ifnull details

나는보십시오.

java.lang.IllegalArgumentException가 : 때문에 쿼리를 만드는 방법의 DISPLAY_NAME

+0

질문을 편집하여 Logcat의 오류 메시지를 포함 하시겠습니까? –

+0

알렉산더 – user785975

답변

1

같은 잘못된 열 IFNULL (이름, 번호), 괄호 같은 상황이되고 있습니다 자동 탈출 SQL 주입 공격을 방지 할 수 있습니다.

당신은 원시 DB (안 컨텐트 프로를 통해)에 직접 액세스 할 상황에서

, 그렇게처럼 SQLiteDatabase.rawQuery를 사용할 수 있습니다

myDB.rawquery을 ("는 SELECT * FROM 곳 a.id B = b.someid ", null);

그러나이 경우 연락처 응용 프로그램의 call_log 데이터베이스에 액세스하려는 것처럼 보입니다.이 응용 프로그램은 제공된 ContentResolver를 통해서만 수행 할 수 있습니다. 의도적으로 값을 보내고 SQL 명령을 변수로 보낼 수 없도록 설계되었으므로 ifnull (...)이 작동하지 않으며 데이터를 가져올 때 논리를 사용하여 이름과 숫자를 선택해야합니다 커서.

+0

어떻게 할 수 있습니까? – user785975