我想知道是否可以在Android中执行以下操作:
public Cursor getFlowsByCategory(int type, int categoryID, int limit) { SQLiteDatabase db = dbHelper.getReadableDatabase(); final String[] columns = {ID, FLAGS, SUBJECT, AMOUNT, AMOUNT_NO, CATEGORY}; final String selection = "((" + FLAGS + " & ?) >> 1 = ?) AND (" + CATEGORY + " = ?)"; final String[] selectionArgs = {Integer.toString(Flow.FLOW_TYPE), Integer.toString(type), Integer.toString(categoryID)}; return db.query(TABLE, columns, selection, selectionArgs, null, null, ID + " DESC", Integer.toString(limit)); }
FLAGS是一个1字节的位掩码,我只想选择具有掩码的第二位(位置1)的行。掩码(Flow.FLOW_TYPE)为0b00000010,类型参数可以为0或1。它应该可以工作,但不能这样做:我在做什么错?
该query函数仅接受字符串作为参数,但是在SQLite中,数字和字符串绝不等于(除非您具有类型亲和力,但这仅适用于列值,不适用于表达式)。
query
您必须将参数显式转换回数字:
((...) >> 1 = CAST(? AS INTEGER)) AND ...