2013-06-06 2 views
0

1.안드로이드 fts3 표 1에서

int mWordId = 65535; 
String[] projection = { 
    "wordId", 
    "rank", 
     }; 
String selection = "wordId MATCH ? "; 
String[] selectionArgs = {Integer.toString(mWordId)}; 

Cursor c = pDatabase.query("words" 
    ,projection 
    ,selection 
    ,selectionArgs 
    ,null 
    ,null 
    ,"rank DESC"); 

c.moveToFirst(); 
int count= c.getCount(); 

2.

int mWordId = 65535; 
String[] projection = { 
    "wordId", 
    "rank", 
     }; 
String selection = "wordId =? "; 
String[] selectionArgs = {Integer.toString(mWordId)}; 

Cursor c = pDatabase.query("words" 
    ,projection 
    ,selection 
    ,selectionArgs 
    ,null 
    ,null 
    ,"rank DESC"); 

c.moveToFirst(); 
int count= c.getCount(); 

3.

String query = "SELECT wordId,rank From words WHERE wordId=65535 ORDER BY rank DESC"; 
Cursor c = pDatabase.rawQuery(query,null); 
c.moveToFirst(); 
int count= c.getCount(); 

작동하지 않습니다, 나는 "일치"및 번호를 사용 결과는 1입니다.
2에서 "="를 사용하고 결과의 수는 0입니다.
3에서는 "="및 rawQuery()를 사용합니다. 결과는 1입니다.

문제가 없습니다.

답변

1

1에서 MATCH은 문자열에서만 작동하므로 wordId 열의 모든 값을 문자열로 변환하고 '65535' 문자열을 검색합니다.

에서 wordId 열의 값을 '65536'과 비교합니다.

3에서 wordId 열의 값을 65536과 비교합니다.

문자열이 아닌 숫자에만 매개 변수 (selectionArgs)를 사용해야합니다.

FTS 테이블에서 효율적으로 작동하는 쿼리는 MATCH의 조회와 rowid/docid의 조회입니다. 다른 조회가 필요한 경우 데이터베이스 스키마가 올바르게 설계되지 않았습니다.

관련 문제