微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android / SQLite – WHERE子句上的位操作

我想知道在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.它应该工作,但它没有:我做错了什么?

解决方法:

查询函数只接受字符串作为参数,但在sqlite中,数字和字符串永远不会相等(除非您有type affinity,但这仅适用于列值,而不适用于表达式).

您必须将参数显式转换回数字:

((...) >> 1 = CAST(? AS INTEGER)) AND ...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐