我在原始查询中绑定参数时遇到问题,其中值可能为null。 所以我接下来准备好了声明:
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);
我得到了正确的结果,现在是什么原因造成的?
答案 0 :(得分:1)
Android数据库API仅支持字符串作为参数,因此除非它们是字符串,否则找不到column1
值。
普通整数没有格式问题,也无法导致SQL注入,因此您只需将它们直接写入SQL查询:
String ss = "SELECT * FROM Table1 WHERE ifnull(column1,-1) = " + columnID;
cursor = database.rawQuery(ss, null);