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。
我找不到问题。
答案 0 :(得分:1)
在1中,MATCH
仅适用于字符串,因此它会将wordId
列的所有值转换为字符串,并在其中搜索字符串'65535'
。
在2中,您要将wordId
列中的值与字符串'65536'
进行比较。
在3中,您要将wordId
列中的值与数字65536
进行比较。
您应该仅对字符串使用参数(selectionArgs
),而不是数字。
请注意,在FTS表上有效运行的唯一查询是MATCH
的查找和rowid
/ docid
的查找。
如果您需要其他查找,则数据库模式设计不正确。