Android sqlite原始查询绑定

时间:2014-12-03 15:41:15

标签: android sqlite binding

我在原始查询中绑定参数时遇到问题,其中值可能为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);

我得到了正确的结果,现在是什么原因造成的?

1 个答案:

答案 0 :(得分:1)

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

普通整数没有格式问题,也无法导致SQL注入,因此您只需将它们直接写入SQL查询:

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