2011-04-04 67 views
1

這裏的第一個(很多?)帖子。用於iphone的xcode中的LIKE語句的sqlite

我有一個問題與我的聲明。

sqlite3_stmt *statement; 
    const char *query = "select * from words where ordet LIKE ?001"; 

    NSString *wildcard = [NSString stringWithFormat:@"%@%%", fullWordForSQL.text]; 
    sqlite3_bind_text(statement, 1, [wildcard UTF8String], -1, SQLITE_STATIC); 

    if (sqlite3_prepare_v2(dbHandle, query, -1, &statement, NULL) == SQLITE_OK){ 
     NSLog(@"in if"); 
     NSLog(@"Data: %s", query); 

我已經成功地與查詢檢索的數據:

const char *query = "select * from words where ordet LIKE "_test__"; 

但是,當我嘗試將動態地創建字綁定它不沾。 我的nslog在「ordet LIKE?001」中打印出「Data:select * from words」,所以不知何故我沒有得到綁定的工作。 我知道沿着上面的代碼的方式會有其他問題,但現在我堅持在這個問題

回答

2

query不會改變當你打電話sqlite3_bind_text()。如果你仔細想一想,就沒有辦法改變,因爲你宣稱它是const char *。你想要做的就是使用sqlite3_trace()進行註冊以獲得最終綁定字符串的回調,以便查看真正發生的事情。

+0

我不知道你的意思。我的英語可能會生鏽。我知道從PHP的SQL,但這對我來說是新的。我在做... – Martin 2011-04-04 18:11:14

+0

調用'sqlite3_bind_text()'不會修改'query'。它創建一個新的語句對象。你的'NSLog()'輸出'query',它總是原文。如果你想查看綁定的結果,你應該看看'sqlite3_trace()',它會在處理它之前發送給你這個字符串。 – 2011-04-04 18:14:09

+0

啊,當然...我會看看跟蹤() – Martin 2011-04-04 18:18:17

1

難道你不需要圍繞單引號中的值? 「在哪裏像'%001'」或者在Xcode中是不必要的?我不熟練xcode。您是否嘗試將通配符插入到已經包含在語句字符串中的值前面的sql語句中,或者您是否試圖將通配符添加到搜索值,然後將該search-value-with-通配符的聲明?它看起來像我的前者,但正如我所說,我不知道xcode。我通常不會包含一條查詢語句中的搜索項的,但這樣做:

 "select * from words where ordet like ?" 

     // prepend the wildcard to my search term 
     // bind the search term to my query 
+0

其實我從其他網站複製的例子,其中許多人都滿意的用戶,但在我的情況下,它does not。 – Martin 2011-04-04 18:13:04

0

嘗試做你的prepare_v2語句之前,您bind_text statment。

+0

實際上我正在測試代碼示例,但意識到我不想要額外的參數,我建立了查詢用已知的變量現在和它的工作。接受一件事,我要拋出一個問題。:)謝謝你的幫助,但... – Martin 2011-04-04 22:15:41

0

我覺得這簡單得多。

NSString *query = [NSString stringWithFormat:@"SELECT * FROM words WHERE ordet GLOB '*%@*' ", fullWordForSQL.text];