2012-03-09 44 views
0

使用像「東西%%」我不知道這是不是真的,但我被告知,FMDatabase執行更好,如果你這樣做在FMDatabase爲iOS

NSString *query = [NSString stringWithFormat:@"SELECT * FROM db where col=?"]; 
FMResultSet *rs = [theDatabase executeQuery:query, columnToLookFor]; 

vs 

NSString *query = [NSString stringWithFormat:@"SELECT * FROM db where col='columnToLookFor'"]; 
FMResultSet *rs = [theDataBase executeQuery:query]; 

因此,我們有一個搜索查詢,這是否:

NSString *query = [NSString stringWithFormat:@"SELECT Symbol, Category FROM Symbols where Category like \"%%%@%%\" or Symbol like \"%%%@%%\" group by Symbol, Category order by Category", searchtext, searchtext]; 
FMResultSet *rs = [theDatabase executeQuery:query]; 

我想這個更改爲:?然而,在第二形式與

NSString *query = [NSString stringWithFormat:@"SELECT Symbol, Category FROM Symbols where Category like \"%%?%%\" or Symbol like \"%%?%%\" group by Symbol, Category order by Category"]; 
FMResultSet *rs = [theDatabase executeQuery:query, searchtext, searchtext]; 

,我FMResultSet是0,我ñ確信我在這種情況下做錯了什麼。這會加速我們的搜索嗎?或者更糟糕的是,這個功能需要花費很長時間才能實現。

回答

0

應該沒有理由爲什麼一個人會工作,而另一個人不會工作,假設你的第一個searchtext變量是一個問號,因爲你正在將第二個字符串放入SQL字符串中。你可能想改變兩行這樣的:

NSString *query = [NSString stringWithString:@"SELECT Symbol, Category FROM Symbols where Category like '%%?%%' or Symbol like '%%?%%' group by Symbol, Category order by Category"]; 
FMResultSet *rs = [theDatabase executeQuery:query]; 

此外,行前我就這樣做只是爲了看看有什麼SQL正在尋找時,它正被FMDB處理,如:

[theDatabase setTraceExecution:YES]; 

編輯:請嘗試更改到此,看到了跟蹤執行這樣說:

NSString *query = [NSString stringWithString:@"SELECT Symbol, Category FROM Symbols where Category like '%%?%%' or Symbol like '%%?%%' group by Symbol, Category order by Category"]; 
FMResultSet *rs = [theDatabase executeQuery:query, searchtext, searchtext, nil]; 
+0

感謝setTraceExecution。這有助於看到發生了什麼。在'%%?%%'的情況下,對FMDatabase的查詢就是:'%?%'。我似乎沒有註冊我的搜索文本。是因爲我需要空白嗎? – Crystal 2012-03-09 21:41:31

+0

啊,我明白你在做什麼,自從我使用FMDB以來已經有一段時間了。如果您更改第二行,會發生什麼情況,因爲我的編輯如上所示? – 2012-03-11 12:58:51

-1
FMResultSet *result = [db executeQuery: @"SELECT * FROM channels_list WHERE type = 'person' AND members LIKE (?)",[NSString stringWithFormat:@"%%%@%%", userID]];