2011-01-20 4 views
0

안녕하세요 저는 follwing 코드를 사용하여 배열의 대량 데이터를 sqlite db에 삽입하고 있습니다 ...하지만 매우 느립니다 ... 조언 해주십시오 ... 올바른 접근 방식을 사용하고 있습니까?iphone sqlite 데이터베이스에 대량 삽입

sqlite3 * db1 = nil; db1 = [One2GuideUAppDelegate getNewDBConnection];

sqlite3_stmt *init_statement = nil; 
@try 
{ 


    if(init_statement == nil) 
    { 
     const char *sql = "insert into tblBrand(intBId,intVersion,intLikes,intDontLikes,strName,strDesc,strWebsite,intEst,strFounder,strLogo,strThumbnail) values(?,?,?,?,?,?,?,?,?,?,?)"; 
     if(sqlite3_prepare_v2(db1, sql, -1, &init_statement, NULL) != SQLITE_OK) 
      NSAssert1(0,@"Error: Failed to prepare statement with message '%s'.",sqlite3_errmsg(db1)); 
    } 

    for(int br=0;br<[brands count];br++) 
    { 
     BrandVO *brandVO=[brands objectAtIndex:br ]; 
     NSString *brandID=brandVO.brandID; 
     NSString *brandVer=brandVO.brandVersion; 
     NSString *brandLikes=brandVO.likes; 
     NSString *brandDontLikes=brandVO.dontLikes; 
     NSString *brandName=brandVO.name; 
     NSString *brandDesc=brandVO.description; 
     NSString *brandWeb=brandVO.url; 
     NSString *brandEstb=brandVO.establishedYear; 
     NSString *brandFounder=brandVO.founders; 
     NSString *brandLogo=brandVO.logoURL; 
     NSString *brandthumb=brandVO.thumbnailURL; 





    sqlite3_bind_int(init_statement, 1, [brandID intValue]); 
    sqlite3_bind_int(init_statement, 2, [brandVer intValue]); 
    sqlite3_bind_int(init_statement, 3, [brandLikes intValue]); 
    sqlite3_bind_int(init_statement, 4, [brandDontLikes intValue]); 
    sqlite3_bind_text(init_statement, 5,[brandName UTF8String],-1,SQLITE_TRANSIENT); 
    sqlite3_bind_text(init_statement, 6,[brandDesc UTF8String],-1,SQLITE_TRANSIENT); 
    sqlite3_bind_text(init_statement, 7,[brandWeb UTF8String],-1,SQLITE_TRANSIENT); 
    sqlite3_bind_int(init_statement, 8,[brandEstb intValue]); 
    sqlite3_bind_text(init_statement, 9,[brandFounder UTF8String],-1,SQLITE_TRANSIENT); 
    sqlite3_bind_text(init_statement, 10,[brandLogo UTF8String],-1,SQLITE_TRANSIENT); 
    sqlite3_bind_text(init_statement, 11,[brandthumb UTF8String],-1,SQLITE_TRANSIENT); 


    if(SQLITE_DONE != sqlite3_step(init_statement)) 
     NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(db1)); 

    sqlite3_reset(init_statement); 
     } 

} 

@catch (NSException *ex) 
{ 
    @throw ex; 
} 
@finally 
{ 
    if(init_statement)sqlite3_finalize(init_statement); 
    sqlite3_close(db1); 
} 

감사합니다,

답변

3

BEGIN TRANSACTIONEND TRANSACTION과의 거래에 삽입 문을 감 쌉니다. 이것은 대개 대량 삽입물의 속도를 높입니다.

+0

큰 도움이되었습니다. – devaditya

+0

데이터를 가져 오는 동안 동일한 (시작 및 종료 트랜잭션)을 사용할 수 없다고 생각합니다 ... db에서 데이터를 가져 오는 동안 비슷한 속도 문제가 발생합니다 ... ... – devaditya

+0

확인하십시오. 조회하는 열에 대한 색인이 있습니다. – omz

관련 문제