2012-04-08 7 views
1

私はñなどの特殊文字でクエリを実行しようとしたとき、私は問題を抱えています、é、クエリデータを取得ない(のObjective C)

奇妙なことは、私がデータをフェッチしようとしているということですDBと同じデータです。

たとえば、私はテーブル「カテゴリ」を持っています。そのテーブルでは、返される値の1つがcategory_nameフィールドの "Música"です。このデータを使用して、NSArrayにコントローラの値を設定し、それらの値をテーブルビューに取り込みます。テーブルがデータ権利に表示されています。

次に、ユーザがテーブルビューの行「Música」をタップすると、カテゴリ名「Música」のカテゴリに関連するすべてのサブカテゴリが必要です。同様に、この値で、私は、クエリを実行しよう:[[indexPath行] objectAtIndex self.data]:私は、値が(NSStringの*)をクリックした取得CATEGORY_NAMEは、いずれかを持っていないとき、それは正常に動作します

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

category_nameに特殊文字がある場合は、データをフェッチしません。

それ以外の場合は、クエリをログに記録し、SQLite Studioに記録された同じクエリを使用して行をフェッチします。

私のクエリでデータが取得されないことが起こっている可能性がある人はいますか?

+0

クエリで文字列を照合または比較するときに '='の代わりに 'like'を使用します。 –

答えて

1

おそらく、エンコードの問題です。データベースにエンコードされているものは、クエリで渡すエンコードではありません。

チェックするには、SQLiteに入力されている正確なクエリを記録し、クエリの実際のバイトを調べる必要があります。

(Core Dataは、最近のRaw SQLの書き込みにはかなり時間がかかりますが、少なくともFMDBを使用していますが、それ以上のエンコーディングを処理するかどうかはわかりません)

+0

私はこのようにしてクエリをログに記録しました:const char * cstr = [query UTF8String]; printf( "%s \ n"、cstr); NSLog(@ "%@"、[NSString stringWithUTF8String:cstr]);そして、クエリは正しいようです:select category category_name = 'Música' – FreelanceAr

+0

カテゴリからsubcategory_nameこれは役に立ちません。そのロギングコードで明示的に 'UTF8'に変換しています。生のバイトはSQLiteに送信されるので、それらを参照する必要があります。 – bbum

1

使用これは、データベースからデータを取得するために -

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

希望を、これはあなたが探しているものです。どんな心配も私に戻ってくる。 :)

関連する問題