【发布时间】:2011-01-31 05:04:49
【问题描述】:
在 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 声明参数被绑定为 StringS,但我简直不敢相信...因为那将是主要的...咳咳,... WTF
我哪里出错了?
提前致谢。
【问题讨论】:
标签: android sqlite parameters