0

我正在尝试在 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 语句可能对是否有引号很敏感。如果我走错了路,请告诉我。

4

2 回答 2

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);
于 2013-03-31T10:51:21.763 回答
0

"%s = '?' AND %s <= '?' %s > '?'"

忘记了第二个和第三个条件之间的 AND

"%s = '?' AND %s <= '?' AND %s > '?'"

然后测试它是否需要''

于 2013-03-31T06:07:38.757 回答