带有多个参数的SQLite查询

时间:2013-03-31 06:03:53

标签: android sql sqlite

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

2 个答案:

答案 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 > '?'"

然后测试是否需要''或不是