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 的数字的主要内容,如果未能解决你的问题,请参考以下文章

IOS数据库FMDB增删改查的使用原创

FMDB的基本使用

是啥导致 Xcode 3.2 为 FMDB 提供 __unsafe_unretained 错误?

FMDB

FMDB

FMDB 数据库和 xcode 插入数据库