2011-11-20 4 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 문을 구축하려고합니다.

어디로 잘못 가고 있습니까?

EDIT - 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는 좋아하지 않는다 [sqlStatement UTF8String]을 실행하여 C 스타일 문자열을 반환합니다. – Jules

+0

을 좋아하지 않는다, 위의 참조는 NSString의 – Tommy

2

선언 sqlBuildNSMutableString을하고 당신의 캐릭터 구축이 사용하기 :

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

참조 편집, SQLite는 그것이 내가 말한 왜있는 NSString – Jules

관련 문제