在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);
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声明参数绑定为字符串,但我简直无法相信...因为那将是重大的...啊嗯,什么鬼
我在哪里错了?
提前致谢。