我在原始查询中绑定参数时遇到问题,其中值可能为空。所以我有下一个准备好的声明:
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);