【问题标题】:sql select statement not workingsql 选择语句不起作用
【发布时间】:2012-12-24 11:43:43
【问题描述】:

我已经问过这个问题here

当我运行这个查询时 NSString *qsql = [NSString stringWithFormat:@"SELECT * FROM site"];

它工作正常但是当我尝试这个查询时 NSString *qsql = [NSString stringWithFormat:@"SELECT name FROM site WHERE latitude LIKE %f AND longitude LIKE %f",pin_lat,pin_long]; 它不起作用,而我可以在控制台中使用 NSLog(@"lat = %f and long=%f",pin_lat,pin_long) 打印 lat, long 的值 它打印的值是正确的,所以为什么它没有取值查询?

我尝试修改查询,但它根本不起作用

修改后的查询如-NSString *qsql = [NSString stringWithFormat:@"SELECT name FROM site WHERE latitude LIKE \"%%%f%%\" AND longitude LIKE \"%%%f%%\" ",pin_lat,pin_long];

但是当我尝试手动输入纬度时,它工作正常

NSString *qsql = [NSString stringWithFormat:@"SELECT * from site where latitude='-31.7306'"];

我应该如何修改我的查询以便我可以运行它..

【问题讨论】:

  • xcode 只是一个 IDE,这与 xcode 无关
  • “不起作用”是什么意思
  • 我的意思是查询不起作用,然后我无法进入 while 循环......它跳过了 while (.. SQLITE_ROW) 循环,我希望 while 循环工作..

标签: ios sql database sqlite


【解决方案1】:

我猜,这是因为您在查询中使用了AND,所以它会选择满足两个条件的row。尝试使用OR 而不是AND 喜欢

NSString *qsql = [NSString stringWithFormat:@"SELECT name FROM site WHERE latitude LIKE '%f' OR longitude LIKE '%f'",pin_lat,pin_long];

或者,如果你想要满足这两个条件的行,那么你需要在你的数据库中有那个值。

或者,它可能会发生,因为LIKE 尝试完全匹配您提供的内容,您需要使用% 符号来匹配任何内容,然后继续使用该变量。如果你想像你提到的那样匹配你的纬度,你需要使用这样的查询

NSString *qsql = [NSString stringWithFormat:@"SELECT name FROM site WHERE latitude LIKE '%.2f%%' OR longitude LIKE '%.2f'",pin_lat,pin_long];

这将匹配该纬度或经度值中精度为 2 之后的任何值。它将匹配以下值。 19.241111111
19.242222222
19.243333333

【讨论】:

  • 我在没有 NSString *qsql = [NSString stringWithFormat:@"SELECT name FROM site WHERE latitude LIKE '%f' ,pin_lat]; 的情况下尝试了这个;它仍然无法正常工作..
  • 我检查了 NSString *qsql = [NSString stringWithFormat:@"SELECT name FROM site WHERE latitude LIKE '%.2f%%' OR longitude LIKE '%.2f'",pin_lat,pin_long];也不起作用......也不是这个 NSString *qsql = [NSString stringWithFormat:@"SELECT name FROM site WHERE latitude LIKE '%.2f%%'",pin_lat];
  • 您能否发布一些您的pinlat and pinlong 值。
  • NSLog(@"pin lat is %f",pin_lat);输出我 -31.7306 然后这工作正常 NSString *qsql = [NSString stringWithFormat:@"SELECT * from site where latitude='-31.7306'"];但是当我使用这个查询 SELECT * from site where latitude = %f",pin_lat .. 它不起作用
  • 一些 pin_lat,pin_long 值是:-31.7306,152.794 :-31.7353,152.792 : -33.7256,150.303 .... lat 和 long 都是浮点数并且存在于 DB 中跨度>
【解决方案2】:

如果纬度和经度是数字,like 可能不会像预期的那样工作。

like 所做的是搜索适合该模式的字符串,在没有任何 % 的情况下执行 like 基本上归结为执行较慢版本的 =。

【讨论】:

  • lat 和 long 是浮动的 .. 如果没有 LIKE 它就无法工作我也试过 NSString *qsql = [NSString stringWithFormat:@"SELECT * from site where latitude = %f",pin_lat]; .. 仍然不适合我
  • SQLite 喜欢快速和松散地处理数据类型,所以如果你告诉它将它们视为字符串,它会:)。将 like 替换为 = 并确保数据库包含您正在搜索的确切值。
  • 如果我立即将打印在控制台上的 lat 的值放在上面,我检查了它的所有工作... NSLog(@"lat is = %f",pin_lat);如果我在查询中输入此值,它运行正常,但如果我在查询中输入 %f,它就不起作用.. 我尝试了一切
  • 你能NSLog你发送到数据库的确切字符串,在这里发布并直接在数据库上执行吗?
  • 我在日志中得到了这个查询 .. SELECT * from site where latitude = 37.785834 ... 但它应该是 SELECT * from site where latitude = -37.785834 .. 为什么负号不是他们的查询这就是它不起作用的原因
猜你喜欢
  • 2023-03-30
  • 2015-05-14
  • 1970-01-01
  • 1970-01-01
  • 2018-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多