2012-04-08 64 views
1

我有麻煩時,我嘗試用特殊字符,如N到執行查詢,E等查詢有特殊字符不能讀取數據(目標C)

奇怪的是,我試圖與獲取數據來自數據庫的相同數據。

例如,我有一個表「類別」。在該表中,返回的值之一是字段category_name的「Música」。有了這些數據,我用控制器中的值填充一個NSArray,用這些值填充表視圖。表格顯示在數據中。

然後,當用戶在我的表格視圖中點擊行「Música」時,我需要與category_name「Música」類別相關的所有子類別。我得到的值點擊(的NSString *)[self.data objectAtIndex:[indexPath行],並用這個值我試圖執行像查詢:

NSString *query = [NSString stringWithFormat:@"select subcategory_name from categories where category_name = '%@'", (NSString *)[self.data objectAtIndex:[indexPath row]]]; 

當CATEGORY_NAME沒有任何它正常工作特殊字符,但如果category_name具有特殊字符,則不會提取任何數據。

否則,如果我記錄查詢並使用SQLite Studio中記錄的相同查詢,它將提取行。

有沒有人有任何想法可以發生什麼,我的查詢不會獲取數據?

+0

在匹配或比較查詢中的字符串時,使用'like'而不是'='。 – 2014-09-25 06:26:35

回答

1

最有可能的是,這是一個編碼問題。無論數據庫中的編碼是不是您在查詢中傳遞的編碼。

要檢查,您需要記錄準確提交給SQLite的查詢並檢查查詢的實際字節。 (核心數據處理這種東西相當好 - 現在寫入原始SQL通常是浪費時間,至少使用FMDB,但我不知道它是否會處理編碼更好。)

+0

我以這種方式登錄了我的查詢:const char * cstr = [query UTF8String]; printf(「%s \ n」,cstr); NSLog(@「%@」,[NSString stringWithUTF8String:cstr]);而查詢似乎是正確的:從category_name中選擇subcategory_name category_name ='Música' – FreelanceAr 2012-04-08 17:44:54

+0

這不會幫助;您明確地在該日誌記錄代碼中導致轉換爲「UTF8」。您需要查看發送給SQLite的原始字節。 – bbum 2012-04-09 00:38:09

1

使用此功能可以從數據庫中獲取的數據 -

[NSString stringWithUTF8String:(const char*)sqlite3_column_text(statement, 4)]; 

希望,這是你在找什麼。任何擔心都會回到我身上。 :)