2013-03-23 47 views
0

我想選擇一個記錄FROM數據庫WHERE'balance'大於你輸入的數字。Xcode比較來自FMDB的號碼

正常的sql是: SELECT cardNum FROM cardInfo WHERE balance> money ORDER BY withdrawals DESC,discount 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). 

是任何人誰可以幫幫我〜 謝謝〜

回答

0

你接近:

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)

+0

的問題是:在數據庫中的平衡是一個字符串,而不是數量。當我將餘額內容添加到數據庫時,號碼不起作用。 – user1132443 2013-03-24 13:03:10

+0

如果數據庫中的數字是一個字符串,那麼您將得到一個字符串比較,而不是數字比較,所以您對「常規sql」的原始評論似乎是錯誤的。要比較編碼爲字符串的數字,您必須讓數據庫執行轉換,以便您可以獲得數字比較,因此請使用「convert(decimal(28,8),isnull(balance,' 0')「,而不是」balance「以上 – gaige 2013-03-24 17:41:13

+0

謝謝你有什麼想法如何將內容保存爲數據庫中的數字嗎?我正在使用FMDB框架,當我嘗試將數字放入它時,它顯示 – user1132443 2013-03-26 01:48:53

0

只是通過它的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]]; 

編輯

如果平衡是一個字符串,然後簡單地做到這一點!

NSString * moneyText = moneyField.text; 
NSString *selectedRecord = [db stringForQuery:@"SELECT cardNum FROM cardInfo WHERE balance > ? ORDER BY withdrawals DESC, discount DESC", moneyText]; 
+0

問題是,在數據庫中的平衡是一個字符串,而不是一個數字。我不能將內容作爲一個數字添加到表格中。 – user1132443 2013-03-24 13:05:08

+0

@ user1132443請參閱我編輯的問題答案! – 2013-03-24 13:15:40

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]; 
+0

爲了改善您的答案,考慮寫一個簡短的解釋來陪伴你的代碼。 – adamdunson 2013-12-16 14:09:01

+0

上午在使用FMDB數據庫 – 2013-12-17 12:12:17