Xcode 比较来自 FMDB 的数字
Posted
技术标签:
【中文标题】Xcode 比较来自 FMDB 的数字【英文标题】:Xcode compare numbers from FMDB 【发布时间】:2013-03-23 09:43:07 【问题描述】:我想从数据库中选择一条记录,其中“余额”大于您键入的数字。
常规的 sql 是: SELECT cardNum FROM cardInfo WHERE balance > money ORDER BY 提款 DESC,折扣 DESC。
但我不知道如何在 Objective-C 中执行此操作(将整数与 'WHERE' 子句中的 NSString 进行比较)。问题是没有 NSInteger 可以保存到 FMDB 表中。
这是我的代码的一部分:
NSString * moneyText = moneyField.text;
double money = [moneyText doubleValue];
NSString *selectedRecord = [db stringForQuery:@"SELECT cardInfo.cardNum FROM cardInfo WHERE (cardInfo.currentBalance ... I don't know what here is)ORDER BY withdrawals DESC]; (I want to get the first record only).
有谁可以帮帮我吗?~ 谢谢!~
【问题讨论】:
【参考方案1】:NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [dirPaths objectAtIndex:0];
NSString *databasePath = [docDir stringByAppendingPathComponent:@"samcontact.sqlite"];
NSString *name;
NSString *phone;
FMDatabase *database = [FMDatabase databaseWithPath:databasePath];
[database open];
FMResultSet *results = [database executeQuery:@"select * from phone where Name = ?",txt_Name.text];
while ([results next])
name = [results stringForColumn:@"Name"];
phone = [results stringForColumn:@"phoneno"];
txt_Name.text = name;
txt_Contact.text = phone;
[database close];
【讨论】:
为了改进你的答案,考虑写一个简短的解释来伴随你的代码。 我正在使用 FMDB 数据库【参考方案2】:你已经接近了:
NSString *selectedRecord = [db stringForQuery: @"SELECT cardNum FROM cardInfo WHERE balance > ? ORDER BY withdrawals DESC, discount DESC", @(money)];
这基本上绑定了由@(money)
在语句中创建的NSNumber
,这导致它在调用SQL时被替换。 stringForQuery:
始终返回第一个记录集中的第一个值(如果没有匹配项,则返回 nil
)。
对于旧版本的编译器,使用[NSNumber numberWithDouble: money]
而不是@(money)
。
【讨论】:
问题是:数据库中的余额是字符串,不是数字。当我将余额的内容添加到数据库中时,数字不起作用。 如果数据库中的数字是字符串,那么您将得到字符串比较,而不是数字比较,因此您对“常规 sql”的原始评论似乎是错误的.要与编码为字符串的数字进行比较,您必须让数据库执行转换,以便获得数字比较,因此使用“convert(decimal(28,8), isnull(balance,' 0')”而不是上面的“平衡”。 谢谢。您知道如何将内容保存为数据库中的数字吗?我正在使用 FMDB 框架。当我尝试将数字放入其中时。它在表格中没有显示任何内容。【参考方案3】:只需将其作为 NSNumber 传递,如下所示:
NSString * moneyText = moneyField.text;
double money = [moneyText doubleValue];
NSString *selectedRecord = [db stringForQuery:@"SELECT cardNum FROM cardInfo WHERE balance > ? ORDER BY withdrawals DESC, discount DESC", [NSNumber numberWithDouble:money]];
编辑
如果 Balance 是一个字符串,那么只需执行此操作!
NSString * moneyText = moneyField.text;
NSString *selectedRecord = [db stringForQuery:@"SELECT cardNum FROM cardInfo WHERE balance > ? ORDER BY withdrawals DESC, discount DESC", moneyText];
【讨论】:
问题是,数据库中的余额是一个字符串,而不是一个数字。我无法将内容作为数字添加到表格中。以上是关于Xcode 比较来自 FMDB 的数字的主要内容,如果未能解决你的问题,请参考以下文章