2 Stimmen

So verwenden Sie die SQLITE3 LIKE-Anweisung

Ich habe Probleme bei der Ausführung einer dynamischen LIKE-Anweisung in meinem Projekt: Diese Abfrage funktioniert einwandfrei und gibt alle Elemente mit einem "t" im Namen zurück:

const char *sql = "select * from bbc_ipad_v1_node where name LIKE '%%t%%'";

Wenn ich versuche, dies dynamisch zu tun, erhalte ich keine Fehler, sondern nur ein leeres Ergebnis. Es scheint, dass der Wert Null ist. Ich versuche, einen String-Wert 's' zu binden, der einen korrekten Wert ausgibt

NSLog(@"bbc_ : search menu items from db based on: %@",s);
const char *sql = "select * from bbc_ipad_v1_node where name LIKE '%%?%%'";
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(database, sql, -1, &statement, NULL) == SQLITE_OK) {
sqlite3_bind_text(statement, 1, [s UTF8String],-1,SQLITE_TRANSIENT);

Wie sollte ich diesen Wert binden, statt ihn zu verwenden:

const char *sql = "select * from bbc_ipad_v1_node where name LIKE '%%?%%'";

4voto

Thomas Joos Punkte 2431

Ich habe gerade eine gute Erklärung gefunden unter http://www.innerexception.com/2008/10/using-like-statement-in-sqlite-3-from.html

Ich habe folgende Zeilen geändert:

const char *sql = "select * from bbc_ipad_v1_node where name LIKE ?001";

y

NSString *searchInput = [NSString stringWithFormat:@"%@%%", s];
sqlite3_bind_text(statement, 1, [searchInput UTF8String],-1,SQLITE_TRANSIENT);

1voto

amindfv Punkte 8348

Sie können auch einfach sagen

const char *sql = "select * from bbc_ipad_v1_node where name LIKE '%t%'";

(Beachten Sie die Einzel- % s)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X