Como usar o sqlite como declaração
-
27-09-2019 - |
Pergunta
Tenho problemas para executar uma declaração dinâmica como no meu projeto: esta consulta funciona como um charme e retorna todos os itens com um 't' em seu nome:
const char *sql = "select * from bbc_ipad_v1_node where name LIKE '%%t%%'";
Quando tento fazer isso dinamicamente, não recebo erros, mas apenas um resultado vazio. Parece que o valor é nulo. Eu tento vincular um valor de string 's' que gera um valor correto
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 devo vincular esse valor em vez de usar:
const char *sql = "select * from bbc_ipad_v1_node where name LIKE '%%?%%'";
Solução
Acabei de encontrar uma ótima explicação em http://www.innerexception.com/2008/10/using-like-tatement-in-sqlite-3-from.html
Eu mudei as seguintes linhas:
const char *sql = "select * from bbc_ipad_v1_node where name LIKE ?001";
e
NSString *searchInput = [NSString stringWithFormat:@"%@%%", s];
sqlite3_bind_text(statement, 1, [searchInput UTF8String],-1,SQLITE_TRANSIENT);
Outras dicas
Você pode realmente dizer
const char *sql = "select * from bbc_ipad_v1_node where name LIKE '%t%'";
(Observe o único%
s)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow