我在 Android 平台 (2.2) 上使用数据库参数进行查询时遇到问题。我创建了这样的表:
db.execSQL("CREATE VIRTUAL TABLE " + Msg._TABLE_NAME + " USING FTS3 ("
+ Msg._ID + " INTEGER, "
(...)
+ Msg.READ + " SHORT DEFAULT 0,"
+ Msg.URGENT + " SHORT DEFAULT 0"
+ ");");
然后我尝试使用参数化查询来查询:
String[] columns = new String[] {Msg.ROWID, Msg.TITLE, Msg.READ, Msg.URGENT};
(...)
getContentResolver().query(Msg.CONTENT_URI, columns,
Msg.URGENT + "=? AND " + Msg.READ + "=?" + , whereArgs, null);
where whereArgs
每个查询都不同:
String[] urgentUnread = new String[]{"1", "0"};
String[] regularUnread = new String[]{"0", "0"};
但无论如何,即使数据存在,它也会返回 0 个结果/行。内容提供者不会更改参数,并且使用 QueryBuilder 以及“直接”调用查询时查询不会返回任何内容:
Cursor c = db.query(tables, columns, where, whereArgs, groupBy, having, orderBy, limit);
如果我只进行字符串连接,则查询有效:
getContentResolver().query(Msg.CONTENT_URI, columns,
Msg.READ + "=0 AND " + Msg.URGENT + "=1", null, null);
但这似乎扼杀了参数查询的目的,并且很难缓存。 Dalvik 抱怨(在进行了大量查询之后)缓存中没有空间用于查询,并且具有讽刺意味的是,他告诉我使用带有“?”的参数化查询。我很愿意,相信我:)
我知道 JavaDoc 声明参数被绑定为 StringS 但我只是无法相信......因为那将是主要的......咳咳,......WTF
我这里哪里出错了?
提前致谢。