2013-06-06 56 views
0

1.Android的FTS3表不起作用

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,我使用 「匹配」 的數目和結果爲1.
2,我使用「=」和結果數爲0.
在3中,我使用「=」和rawQuery()。結果的數量是1.

我找不到問題。

回答

1

1,MATCH僅適用於字符串,因此它將wordId列的所有值轉換爲字符串並在字符串'65535'中搜索它們。

2,您將wordId列中的值與字符串'65536'進行比較。

3,您將wordId列中的值與65536的值進行比較。

您應該僅對字符串使用參數(selectionArgs),而不是數字。

請注意,在FTS表上有效工作的唯一查詢是使用MATCH進行查找,並在rowid/docid上進行查找。 如果您需要其他查找,則數據庫架構設計不正確。