失敗這是一個奇怪的問題。我發現了一個可行的解決方法,但我想明白爲什麼,因爲我懷疑它稍後會在我的代碼中再次出現。這裏是一個的給我這個問題的方法:FMDatabase查詢適用於?但與文字
FMDatabase *cardDatabase // initialized elsewhere
NSString *cleanChar; // this is the sanitized query string
NSString *cardQueryString;
int cardID;
switch ([self studyLanguage])
{
case CSStudyLanguageMandarinTraditional:
cardQueryString = @"SELECT rowid, * FROM trad_char WHERE search = ";
break;
// [...other cases...]
}
cardQueryString = [cardQueryString stringByAppendingString:cleanChar];
[cardDatabase open];
FMResultSet* cardSet = [cardDatabase executeQuery:cardQueryString];
BOOL foundCard = NO;
while ([cardSet next])
{
foundCard = YES;
cardID = [cardSet intForColumn:@"rowid"];
}
[cardDatabase close];
該代碼給出了一個數據庫錯誤:
DB Error 1: no such column: 意
其中,「意」的字符序列我傳遞cleanChar,這顯然是正在接受治療作爲一個列而不是某種價值。但是...如果我在查詢步驟中添加搜索字符,如下所示:
cardQueryString = @"SELECT rowid, * FROM trad_char WHERE search = ?";
FMResultSet* cardSet = [cardDatabase executeQuery:cardQueryString, cleanChar];
一切正常。
所以我實際上已經解決了這個問題......但是我想知道爲什麼,因爲它影響了我想要做更復雜的查詢,在路上有多個連接,它會變得更難在最後插入變量。
所以:這是FMDatabase中的一個錯誤嗎?我只是不明白如何使用FMDatabase?還是有代碼的其他問題?