奇怪的SQLite行为。结果不同;相同的查询

时间:2014-10-08 16:25:53

标签: ios objective-c 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应用程序在Objective C中使用Xcode6

完成

我认为sqlite3在两个设备上的版本不完全相同,并且不会以相同的方式解释括号的优先级。

2 个答案:

答案 0 :(得分:1)

我怀疑iOS版本在SQL中存在问题,可能缺少括号。例如,以下SQL可能包含enabled不等于1的结果:

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

确保包括原始问题中显示的括号。

答案 1 :(得分:0)

找到它。

故事,当应用程序加载时,它会清空数据库,并从其下载的xml中填充所有数据。

之后,它会使用像这样的更新语句更新某些记录,例如“enabled”字段。

更新客户设置enabled = 1其中date(some_date_field)> date('1980-12-01');

这是问题所在:

更新客户设置enabled = 1其中some_date_field> date('1980-12-01');

stackoverflow similar problem solution

所以,在这种情况下,认为两个数据集在相同但实际上不相等的情况下是正确的,这就是为什么我看到不同的结果。

无法从ipad获取数据库(不再越狱)让我感到困惑,这个和文档目录,每次在模拟器中运行应用程序时都会发生变化并不是真的有帮助:(

感谢所有人的兴趣。