在我的 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 子句。 谁能帮我这个?谢谢。
最佳答案
答案在标题中:您正试图将整数值传递到查询中,但您最终得到的是字符串值。
这是 Android 数据库 API 中一个可怕的设计错误;您只能对字符串使用参数。
整数不存在字符串值可能存在的格式化和 SQL 注入(inject)问题,因此您可以直接将数字插入到 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
语法错误。)
关于具有 int 值的 Android Sqlite 选择 args[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18746149/