Android的fts3表不起作用

时间:2013-06-06 05:49:28

标签: android sqlite 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中,我使用“匹配”,结果的数量是1.
在2中,我使用“=”,结果数为0 在3中,我使用“=”和rawQuery()。结果的数量是1。

我找不到问题。

1 个答案:

答案 0 :(得分:1)

在1中,MATCH仅适用于字符串,因此它会将wordId列的所有值转换为字符串,并在其中搜索字符串'65535'

在2中,您要将wordId列中的值与字符串'65536'进行比较。

在3中,您要将wordId列中的值与数字65536进行比较。

您应该仅对字符串使用参数(selectionArgs),而不是数字。

请注意,在FTS表上有效运行的唯一查询是MATCH的查找和rowid / docid的查找。 如果您需要其他查找,则数据库模式设计不正确。