在我的DBHelper的getEvents方法中有这行代码。
int year, month, day;
String[] columns = new String[] { KEY_EVENTNAME, KEY_DESCRIPTION,
KEY_HOUR, KEY_MINUTE, KEY_DAY, KEY_MONTH, KEY_YEAR,
KEY_REMINDER };
Cursor c = database.query(DATABASE_TABLE, columns,
KEY_YEAR + "=?"+ " AND " + KEY_MONTH + "=?" + " AND "+ KEY_DAY + "=?",
new String[] {String.valueOf(year), String.valueOf(month), String.valueOf(day)},
null, null, KEY_MONTH + " AND "
+ KEY_DAY);
它总是什么都不返回。当我删除以下
int year, month, day;
String[] columns = new String[] { KEY_EVENTNAME, KEY_DESCRIPTION,
KEY_HOUR, KEY_MINUTE, KEY_DAY, KEY_MONTH, KEY_YEAR,
KEY_REMINDER };
Cursor c = database.query(DATABASE_TABLE, columns,
KEY_YEAR + "=?",
new String[] {String.valueOf(year)},
null, null, KEY_MONTH + " AND "
+ KEY_DAY);
它正确运行。我的代码有什么问题?它似乎不接受多个值作为where子句。 谁能帮我这个?感谢。
答案 0 :(得分:14)
答案在标题中:您试图将整数值传递给查询,但实际上最终得到的是 string 值。
这是Android数据库API中一个可怕的设计错误;您只能将参数用于字符串。
整数不具有字符串值可能具有的格式和SQL注入问题,因此您只需将数字直接插入SQL表达式中即可:
Cursor c = database.query(
DATABASE_TABLE, columns,
KEY_YEAR + "=" + year + " AND " +
KEY_MONTH + "=" + month + " AND " +
KEY_DAY + "=" + day,
null, null, null,
KEY_MONTH + "," + KEY_DAY);
(orderBy
语法错误。)
答案 1 :(得分:1)
我没有看到语法或逻辑有什么问题。尝试检查年,月和日的值是否正确。
答案 2 :(得分:0)
感谢您的帮助。在考虑了你建议的所有内容之后,我终于找到了它为什么总是不返回的原因。我传递给此方法的月份值不正确。提前一个月就是为什么它在当月返回0。对不起,我很抱歉。但你所有的答案都是正确的。这是我认为大多数或一些人经历过的错误。作为一种学习,我会特别注意调查我所传递的价值观。仔细查看方法之间传递的值的流量可以节省时间。我花了整整一夜寻找问题,就在今天早上醒来之后,我想起了传递给方法的价值。再次感谢所有给出答案的人。