2011-07-11 67 views
0

我正在使用xcode,並且在目標c中有一個問題,maby你可以幫助我。把一個字符串放到一個sql語句的字符中?

我的函數得到一個字符串,她把它放到一個sql語句中,我不知道該怎麼做,因爲該語句是一個字符,我發現有很多方法來轉換它。

我這樣做:

sql_for_event= " SELECT basic_pic,spriteSheet,sound FROM DataBase WHEN event= %c",[awaking_event UTF8String] ; 

時sql_for_event是語句,awaking_event是一個的NSString我得到的功能。 我該怎麼做?

非常感謝。

回答

2

%c說明符只打印一個單獨的char,它需要是您的方案的sprintf調用的一部分。更簡單的方法是

sql_for_event= [[NSString stringWithFormat:@"SELECT basic_pic,spriteSheet,sound FROM DataBase WHERE event= '%@'",awaking_event] UTF8String]; 
+0

我沒有你所說的話,但我得到WARNNING:警告:分配丟棄了指針目標類型的限定....? – Curnelious

+0

sql_for_event需要聲明爲'const char *' – Joe

+0

Thnaks很多,這很好。 – Curnelious

2

您的方法並不完全正確。嘗試是這樣的:

char buffer[2048]; 
sprintf(buffer, 
    "SELECT basic_pic,spriteSheet,sound FROM DataBase WHEN event='%s'", 
    [awaking_event UTF8String] 
); 

你的做法缺乏的:

  1. 正確的內存分配(你不能只是分配一個字符串常量爲char*,然後修改它
  2. 你的SQL大概需要。 ''如果你正在處理字符字段
  3. With %c你只能得到一個字節(字符)的數據,而不是一個字符數組
2

您也可以使用SQLite API sqlite3_bind_text:

sql_for_event= " SELECT basic_pic,spriteSheet,sound FROM DataBase WHEN event= ?"; 
if (sqlite3_prepare_v2(db, sql, -1, &statement, NULL) == SQLITE_OK) {  
    sqlite3_bind_text(statement, 1, [awaking_event UTF8String],-1,SQLITE_TRANSIENT); 
    //next actions with statement - sqlite3_step(statement) etc 
} 
相關問題