Android sqlite raw query binding



我在原始查询中绑定参数时遇到问题,其中值可能为空。所以我有下一个准备好的声明:

String ss="SELECT * FROM Table1 WHERE ifnull(column1,-1) = ? ";

如果我像我必须的那样执行它,我没有得到任何结果

cursor = database.rawQuery(ss, new String[]{Long.toString(columnID)});

但是如果我像这样手动替换问号:

ss=ss.substring(0,ss.indexOf('?'))+Long.toString(columnID)+ss.substring(ss.indexOf('?')+1);
cursor = database.rawQuery(ss, null);

我得到正确的结果,现在有人是什么原因吗?

Android 数据库 API 仅支持字符串作为参数,因此除非column1值是字符串,否则找不到它们。

纯整数没有格式问题,不会导致 SQL 注入,因此您可以简单地将它们直接写入 SQL 查询:

String ss = "SELECT * FROM Table1 WHERE ifnull(column1,-1) = " + columnID;
cursor = database.rawQuery(ss, null);

最新更新