我正在尝试在SQLite表中查询一行,该行在开始时间和结束时间之间具有相同的星期几,如下所示:
String whereClause = String.format("%s = '?' AND %s <= '?' %s > '?'",
Shift.PROP_DAY_OF_THE_WEEK, Shift.PROP_START_TIME,
Shift.PROP_END_TIME);
String[] whereargs = new String[] { String.valueOf(dow), time, time };
Cursor cursor = db.rawQuery(whereClause, whereargs);
但是我收到以下Logcat错误。
03-30 22:46:02.827: E/AndroidRuntime(11507): android.database.sqlite.SQLiteException: near "dayOfTheWeek": syntax error (code 1): , while compiling: dayOfTheWeek = '?' AND startTime <= '?' endTime > '?'
我添加了单引号(')以包围问号(?)。没有单引号也行不通。我添加了它们,因为sql语句可能对引用是否敏感。如果我走错了路,请告诉我。
答案 0 :(得分:2)
除了缺少AND
之外,您还在参数标记周围添加了字符串分隔符,这可以防止它们被识别为参数。
'?'
只是一个包含问号的字符串;对于参数,请使用普通?
:
String.format("%s = ? AND %s <= ? AND %s > ?", ...);
此外,使用rawQuery
时,您必须写出整个SQL查询。
要使用像您尝试的那样的where子句,您需要query
:
Cursor cursor = db.query("MyTableName",
null, // or column list
whereClause, whereargs,
null, null, null);
答案 1 :(得分:0)
"%s = '?' AND %s <= '?' %s > '?'"
忘了第二和第三个条件之间的AND
"%s = '?' AND %s <= '?' AND %s > '?'"
然后测试是否需要''或不是