2010-08-23 72 views
2

我想在Android上用SQLite做一个相对简单的按位查询操作。当我使用绑定变量时,如果我认为应该返回一些行,则不会返回任何数据。如果我将绑定变量的值直接硬编码到SQL中,它就可以正常工作。我在想我在某处有一些愚蠢的语法问题,但我看不到它。Android SQLite和绑定变量问题

所以这段代码工作得很好:

String selection = new String(FLAGS + " & 2 = 2"); 
cursor = db.query(TABLE_NAME, ALL_COLUMNS, selection, 
    null, null, null, null, null); 

此代码然而(使用绑定变量),不返回行:

String selection = new String(FLAGS + " & ? = ?"); 
String[] selectionArgs = new String[]{"2", "2"}; 
cursor = db.query(TABLE_NAME, ALL_COLUMNS, selection, 
    selectionArgs, null, null, null, null); 

他们俩结果到语法相同的查询正在建造时,我通过调试器检查游标的mQuery属性。后者确实也具有正确填充的mBindArgs属性。我不知道这可能会失败。没有抛出异常或任何东西,它只是不返回任何行。

我可以采取失败的查询,并手动交换两者的问号,并将其粘贴到ADB SQLite命令行界面,它也可以很好地工作。

回答

1

如果我是正确的第二查询产生以下条件:

& '2' = '2' 

,而不是

& 2 = 2 

尝试用AND

更换&请确保您有在FLAG不断没有?字符。

除了这个逻辑条件的一个点是什么?

+0

这是按位操作,我需要使用&。我正在测试标志值的哪些位被设置。 我也考虑过这些引用,但据我所知,这并不一致。显示内置SQL的游标的mQuery属性也不会在问号周围显示引号。 – Mike 2010-08-23 21:47:40

1

我正面临与你一样的问题。正如radek-k所说,查询比较字符串。可以执行

一种解决方案是使用以下命令:

String selection = new String(FLAGS + " & ? = (0|?)"); 
+0

在我的情况下,这做到了诀窍。谢谢! – Wayne 2012-06-27 03:34:08