2011-11-20 163 views
0

我需要建立一個const char其他const char的字符串?如何將const char連接到const char?

const char *sql = ""; 
const char *sqlBuild = ""; 

for(int i=0; i < ac_count; ++i) { 

    if (![sqlBuild isEqualToString:@""]) { 
    sqlBuild = [sqlBuild stringByAppendingString: 
      [NSString stringWithUTF8String:@" UNION "]]; 
    } 
    sql = [[NSString stringWithFormat: 
     @"select sum(price) from tmp%d where due >= date() and due <= '%@'", 
      i, strDBDate] cStringUsingEncoding:NSUTF8StringEncoding]; 

    sqlBuild = [sqlBuild stringByAppendingString: 
     [NSString stringWithUTF8String:sql]]; 
} 

//execute sql 

我已經嘗試過幾次,但不能完全正確,繼承人是我的最後一次嘗試。正如你可以看到我試圖建立一個SQL語句。

我哪裏錯了?

編輯 - 我正在使用不喜歡NSString的sql lite,見下文。

- (NSString*)getCategoryDesc:(int)pintCid { 

NSString *ret = @""; 
const char *sql = "select category from categories where cid = ?"; 

sqlite3 *database; 
int result = sqlite3_open([[General getDBPath] UTF8String], &database); 
if(result != SQLITE_OK) 
{ 
    DLog(@"Could not open db."); 
} 

sqlite3_stmt *statementTMP; 

int error_code = sqlite3_prepare_v2(database, sql, -1, &statementTMP, NULL); 

if(error_code == SQLITE_OK) { 

    sqlite3_bind_int(statementTMP, 1, pintCid); 

    if (sqlite3_step(statementTMP) == SQLITE_ROW) { 
     ret = [[NSString alloc] initWithUTF8String: 
      (char *)sqlite3_column_text(statementTMP, 1)]; 
    } 
} 
sqlite3_finalize(statementTMP); 
sqlite3_close(database); 


return [ret autorelease]; 
} 

回答

3

有到轉換沒有任何好處,然後從一個UTF8字符串;在NSString中做所有事情並在最後將其轉換爲C風格的字符串會更有效率。 @"d"語法也評估爲一個對象,而不是C風格的字符串。

所以,你應該簡化並更正代碼:

NSMutableString *sqlStatement = [NSMutableString string]; 

for(int i=0; i < ac_count; ++i) { 

    if ([sqlStatement length]) [sqlStatement appendString:@" UNION "]; 

    [sqlStatement appendFormat: 
     @"select sum(price) from tmp%d where due >= date() and due <= '%@'", 
      i, strDBDate]; 

} 

// execute SQL string [sqlStatement UTF8String] 
+0

我使用SQLite,見上面,它不喜歡的NSString – Jules

+0

就是爲什麼我說,執行[sqlStatement UTF8String],它返回一個C風格的字符串。 – Tommy

2

申報sqlBuildNSMutableString並用它來建立你的字符串:

NSMutableString *sqlBuild = [NSMutableString string]; 
for (...) { 
    [sqlBuild appendString:...]; 
} 
+0

見編輯,SQLite不喜歡的NSString的 – Jules