2014-10-08 92 views
0

我有這樣一個查詢:奇怪的SQLite行爲。不同的結果;相同的查詢

SELECT id,name,province,enabled 
FROM customers 
WHERE enabled = 1 AND (name LIKE "%to%" OR province LIKE "%to%"); 

使用的是Mac或iPad相同的數據庫給了我不同的結果。

在Mac上,它的工作原理和返回11條記錄,但在iPad上返回55條記錄? (奇怪的是,他們中有些人的領域啓用= 0)真的很奇怪。

iPad應用程序在目標C與Xcode6

做我想sqlite3的不完全是兩個設備上相同的版本,並以同樣的方式在括號優先級不解釋。

+1

我強烈懷疑沒有在你的代碼的兩個版本之間的實際差異。 – 2014-10-08 17:33:37

+1

你所描述什麼是不可能的。請出示執行查詢的代碼。 – 2014-10-08 18:35:32

+0

SQLite是非常從一個平臺到下一個平臺是穩定和可預測的 - 遠遠好於iOS,Windows等等。找到真正的差異是非常不尋常的在行爲上。 – 2014-10-08 20:42:56

回答

0

找到它。

故事,當應用程序加載時,它會清空數據庫,並填充它下載的xml中的所有數據。

之後,它使用像這樣的更新語句來更新像「enabled」字段的一些記錄。

update customers set enabled = 1 where date(some_date_field)> date('1980-12-01');

而且這裏的問題應該是:

更新客戶建立啓用= 1,其中some_date_field>日期( '1980年12月1日');

stackoverflow similar problem solution

所以,在這種情況下是正確的思想,無論databeses地方相同,但在現實中是不相等的,這就是爲什麼我看到diferent結果。

而無法從ipad獲得數據庫(不再是越獄)使我感到困惑,這和文檔目錄,每改變一次你在模擬器中運行應用程序都不是真的幫助:(

感謝大家的關心。

+0

很高興你發現它!僅供參考,您仍然可以通過Xcode從設備下載文檔文件夾:在Xcode「窗口」菜單中,選擇「設備」;然後選擇您的設備並選擇您的應用程序;然後點擊「齒輪」圖標,你可以下載「容器」到你的Mac。 – Rob 2014-10-08 20:11:36

1

我懷疑iOS翻譯在SQL中有問題,可能是缺少括號。例如,下面的SQL可包括結果,其中enabled不等於1:

SELECT id,name,province,enabled 
FROM customers 
WHERE enabled = 1 AND name LIKE "%to%" OR province LIKE "%to%"; 

確保包括括號中所示的原來的問題。

+0

我知道。 SQL有括號,事實上,我測試了它從XCode日誌中複製查詢。這就是爲什麼如此奇怪,相同的查詢不同的結果在不同的設備上使用相同的數據庫。 – MiQUEL 2014-10-08 18:49:25

+0

@MiQUEL好的,我聽到你的聲音。但我認爲在那裏必須有一些細微的差別,這是你的分析。但沒有代碼示例,我們無法幫助您。如果沒有問題的重現性例子,我們無法幫助您。嘗試創建可再現問題的最小可能的[MCVE](http://stackoverflow.com/help/mcve)。但我敢打賭,iOS SQLite引擎中括號的優先級幾乎肯定不是問題。雖然我確定你覺得你已經控制了所有其他可能的變量,但在這裏必須有其他的東西。 – Rob 2014-10-08 19:55:50

相關問題