(随意提高问题的标题,如果你能想到的更好的东西。)奇怪的行为
问题:考虑以下SQLite的查询:
SELECT COUNT(*)
FROM (SELECT 1 AS value UNION SELECT 2 AS value)
WHERE value <= ?
当我使用1
作为参数,I 预计查询产生1
,但它产生2
。为什么会发生?
信息:
这是一个最小的工作示例重现该问题(安卓):
Cursor c = db.rawQuery(
"SELECT COUNT(*) " +
" FROM (SELECT 1 AS value UNION SELECT 2 AS value) " +
" WHERE value <= ? ",
new String[] {String.valueOf(1)});
c.moveToFirst();
Log.i("", "Result: " + String.valueOf(c.getInt(0)));
它威力都与事实参数做作为一个字符串传递,但是,唉,没有其他方式来传递参数到SQLite API,所以我想我没有做任何“错误的”在这里,这是SQLite的工作,转换值ap propriately。我还观察到使用查询的非参数化的版本(这可能是也可能不是相关的问题)时,以下几点:
SELECT COUNT(*)
FROM (SELECT 1 AS value UNION SELECT 2 AS value)
WHERE value <= 1 -- yields 1
SELECT COUNT(*)
FROM (SELECT 1 AS value UNION SELECT 2 AS value)
WHERE value <= '1' -- yields 2
是有意义的。 char'1'= 49 – njzk2
也许你可以使用SELECT'1'和SELECT'2' – njzk2