2011-10-21 2 views
1

android documentation에 따르면이 스크립트는 완전한 sqlite를 지원합니다. 그것이 내가 다음과 같이 쿼리에 대한 projection의 일환으로 core functions을 사용할 수 있다는 뜻 :Android SQLite 핵심 기능

final ContentResolver cr = getContentResolver();  
final String [] projection = new String []{ 
    ..., 
    ..., 
    "replace(...) as replacedCol" 
}; 

Cursor c = cr.query(uri, projection, null, null, null); 

이 조각은 IllegalArgumentException가 발생합니다 (잘못된 열 교체 (...)). 그래서 sqlite 쿼리에서 핵심 함수를 사용하는 방법은 무엇입니까?

편집 허용되는 열을 검사하는 ContentProvider가 오류 일 가능성이 높으므로 콘텐츠 리졸버와 함께 함수를 사용하는 것은 불가능한 것처럼 보입니다. 공급자 쿼리

+0

그것은 당신의 ContentProvider입니까? – Selvin

+0

그래서 불가능합니다 ...하지만 ... 사용자가 listview/spinner를 사용한다고 가정하면 사용자 정의 어댑터를 생성하고이 문자열을 get (view 또는 bindView에서)보기 전에 바꿀 수 있습니다 – Selvin

+0

@Selvin 아니요, 연락처 콘택트 제공자 – Vladimir

답변

1

투영 SQL 쿼리에 <> 열

보통 컨텐트 프로는

static final HashMap<String, String> map = new HashMap<String, String>(); 
static { 
    map.put("NameInProjection", "RealDBColumn AS NameInProjection"); 
    map.put("replacedCol", "replace(...) as replacedCol"); 
} 

를 포함하고 컨텐트 프로의 쿼리 방법에서 우리는 그렇게 SQLiteQueryBuilder에 투사 번역

public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { 
    SQLiteQueryBuilder builder = new SQLiteQueryBuilder(); 
    builder.setTables(table); 
    builder.setProjectionMap(map); 
    return builder.query(mDB.getReadableDatabase(), projection, selection, selectionArgs, null, null, sortOrder); 
} 

처럼 사용 지도를 사용한 실제 검색어