2013-03-31 63 views
0

我想查詢一個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

除了缺少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); 
+0

03-31 12:24:35.797:E/AndroidRuntime(18720):android.database.sqlite.SQLiteException:near「dayOfTheWeek」:語法錯誤(代碼1):編譯時:dayOfTheWeek =? AND startTime <=? AND endTime>?仍然沒有工作 –

+0

當然...我如何查詢沒有表名?!我仍然得到'由於索引超出範圍,無法在索引3處綁定參數。該語句有0個參數。'錯誤,因爲我用'''從'%s ='遺留了代碼?'' AND%s <= '?' %s >'?'「向Patashu提供反饋。現在所有修復。非常感謝。 –

0

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

忘記一個和第二個和第三個條件

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

然後之間進行測試,看是否需要「」或不

+0

現在還沒有工作12月3日至31日:29:38.487:E/AndroidRuntime(19174):android.database .sqlite.SQLiteException:接近「dayOfTheWeek」:語法錯誤(代碼1):編譯時:dayOfTheWeek ='?' AND startTime <='?' AND endTime>'?' –