Cómo utilizar la instrucción Sqlite3 COMO
-
27-09-2019 - |
Pregunta
Tengo problemas para ejecutar una sentencia dinámica COMO en mi proyecto: esta consulta funciona como un encanto y devuelve todos los elementos con una 't' en su nombre:
const char *sql = "select * from bbc_ipad_v1_node where name LIKE '%%t%%'";
Cuando intento hacer esto de forma dinámica no consigo errores, pero sólo un resultado vacío. Parece que el valor es nulo. Trato de enlazar un valor de cadena 's' que da salida a un valor correcto
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);
Como deberia unen este valor en vez de usar:
const char *sql = "select * from bbc_ipad_v1_node where name LIKE '%%?%%'";
Solución
Sólo se encontró una gran explicación http://www.innerexception.com/2008/10/using-like-statement-in-sqlite-3-from.html
He cambiado las siguientes líneas:
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);
Otros consejos
En realidad se puede decir simplemente
const char *sql = "select * from bbc_ipad_v1_node where name LIKE '%t%'";
(Tenga en cuenta los solo-%
s)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow