我正面臨FMDatabase的嚴重問題。我使用如下FMDatabase是否存在「NOT IN」問題或者iPhone上的SQLite不支持它?
SELECT * FROM `article` WHERE `alias` NOT IN ('example_alias')
查詢我使用「NOT IN」,因爲不是「example_alias」有可能是我要排除別名列表。但奇怪的是,這個查詢的結果包含了我想排除的別名的所有記錄。所以FMDatbase正在選擇錯誤的記錄。如果我複製&將此查詢粘貼到SQLite數據庫瀏覽器並在那裏執行,查詢就完成了。
如果我在'IN'前面刪除'NOT',那麼SQLite數據庫瀏覽器會顯示給定別名的所有記錄,並且正如所料,FMDatabase會給我所有沒有它們的記錄...
在下一步I想用DELETE替換SELECT,但是如果保留了所有不需要的記錄並且我想保留的記錄被刪除,確實會造成傷害。
這是FMDatabase或底層SQLite框架(我正在使用libsqlite3.dylib)的一個已知錯誤還是我做錯了什麼?
SQLite絕對正確處理NOT IN,我無法相信FMDB會發生如此嚴重的錯誤。你可以給文章的DDL語句,以及內容的DML語句嗎? – 2011-05-27 08:30:48
經過數小時的嘗試和錯誤,我終於找到了我的錯誤。比誤解機制如何運作更沒有錯誤。我用了一個「?」在我的查詢中使別名列表更加動態。我通過附加字符串逗號分隔和修剪最後一個逗號來構建這個列表。最後,字符串看起來像「'alias1','alias2','alias3'」。該字符串被插入「?」。但是取代「?」的機制其分配的內容包括一些轉義特徵,這些特徵將我的值字符串列表作爲單個值處理,因此沒有這個大的別名字符串的記錄被返回。 – TRD 2011-05-27 12:19:32