2014-10-08 3 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 записей ¿? (И как ни странно, некоторые из них имеют поле enabled = 0) действительно странно.

IPad приложение сделано в Objective C с Xcode6

Я полагаю sqlite3 не точно такой же версии на обоих устройствах, и не интерпретировать таким же образом приоритете скобка.

+1

Я сильно подозреваю, что существует реальная разница в коде между этими двумя версиями. –

+1

то, что вы описали это невозможно. Пожалуйста, покажите код, который выполняет запрос. –

+0

SQLite чрезвычайно стабильной и предсказуемой с одной платформы на другую - намного лучше, чем iOS, Windows и др. Было бы довольно необычно найти фактическое различие в поведении. –

ответ

0

Найдено.

История, когда приложение загружается, оно опустошает базу данных и заполняет все данные из xml, который он загружает.

После этого он обновляет некоторые записи, такие как поле «enabled», с инструкцией по обновлению, подобной этой.

обновление клиентов установлено enabled = 1 где date (some_date_field)> дата ('1980-12-01');

И здесь проблема должна быть:

обновление клиентов набор включен = 1, где some_date_field> Дата ('1980-12-01');

stackoverflow similar problem solution

так, в этом случае было правильно подумал, что оба databeses где идентичны, но в действительности не равны, то почему я видел Diferent результаты.

И не будучи в состоянии получить db из ipad (не взломанный в тюрьму больше) сделал меня путаницей, это и Directory Directory, который меняется каждый раз, когда вы запускаете приложение в симуляторе, на самом деле не помогает :(

Спасибо всем за интерес.

+0

Рад, что вы его нашли! FYI, вы все равно можете загрузить папку документов с устройства через Xcode: в меню «Окно» Xcode выберите «Устройства»; затем выберите свое устройство и выберите приложение; затем нажмите значок «gear», и вы можете загрузить «контейнер» на свой Mac. – Rob

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

+0

@MiQUEL Да, слышу вас. Но я утверждаю, что должна быть какая-то тонкая разница, которая ускользает от вашего анализа. Но без примера кода мы не можем вам помочь. Без воспроизводимого примера проблемы мы не можем вам помочь. Попробуйте создать минимально возможное [MCVE] (http://stackoverflow.com/help/mcve), которое воспроизводит проблему.Но я бы сказал, что приоритетность круглых скобок в iOS SQLite-движке почти наверняка не проблема. Хотя я уверен, что вы чувствуете, что контролируете все возможные переменные, здесь должно быть что-то другое. – Rob