2012-04-08 4 views
1

Ich habe Probleme, wenn ich versuche, Abfragen mit Sonderzeichen wie ñ auszuführen, é etc.Abfragen mit Sonderzeichen nicht Daten (Objective C) Abrufen

Das Seltsame ist, dass ich versuche, Daten mit zu holen die gleichen Daten, die von der DB kamen.

Zum Beispiel habe ich eine Tabelle "Kategorien". In dieser Tabelle ist einer der zurückgegebenen Werte "Música" für das Feld category_name. Mit diesen Daten befülle ich ein NSArray mit den Werten im Controller, die eine Tabelle mit diesen Werten füllen. Die Tabelle zeigt in den Daten rechts.

Dann brauche ich alle Unterkategorien in Bezug auf die Kategorie mit category_name "Música", wenn ein Benutzer in meiner Tabellenansicht in die Zeile "Música" tippt. Ich erhalte den Wert angeklickt (NSString *) [self.data objectAtIndex: [indexPath Zeile]] und mit diesem Wert Ich versuche, eine Abfrage wie auszuführen:

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

Es funktioniert gut, wenn die category_name hat keine Sonderzeichen, aber wenn der Kategorie_Name ein Sonderzeichen hat, ruft er keine Daten ab.

Andernfalls, wenn ich die Abfrage protokollieren und dieselbe Abfrage verwenden, die in SQLite Studio protokolliert wurde, werden die Zeilen abgerufen.

Hat jemand eine Idee darüber, was passieren kann, dass meine Abfragen die Daten nicht abrufen?

+0

Verwenden Sie "wie" anstelle von "=" beim Vergleichen oder Vergleichen von Zeichenfolgen in Abfrage. –

Antwort

1

Höchstwahrscheinlich handelt es sich um ein Codierungsproblem. Was auch immer in der Datenbank codiert wird, ist nicht die Codierung, die Sie in der Abfrage übergeben.

Um dies zu überprüfen, müssen Sie die genaue Abfrage, die an SQLite übergeben wird, protokollieren und die tatsächlichen Bytes der Abfrage untersuchen.

(Core Data behandelt diese Art von Sachen ziemlich gut -.. In diesen Tagen rohe SQL Schreiben ist in der Regel eine Verschwendung von Zeit Mindestens verwenden FMDB, aber ich weiß nicht, ob es Codierungen besser behandelt)

+0

Ich habe meine Abfrage auf diese Weise protokolliert: const char * cstr = [query UTF8String]; printf ("% s \ n", cstr); NSLog (@ "% @", [NSString stringWithUTF8String: cstr]); Und die Abfrage scheint richtig zu sein: Wählen Sie subcategory_name aus Kategorien wo category_name = 'Música' – FreelanceAr

+0

Das wird nicht helfen; Sie verursachen in diesem Protokollierungscode explizit eine Konvertierung in "UTF8". Sie müssen sich die Rohbytes ansehen, wenn sie an SQLite gesendet werden. – bbum

1

Verwenden Sie diese Daten aus der Datenbank zu erhalten -

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

Hope, ist es das, was Sie suchen. Jede Sorge komme zu mir zurück. :)