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);
}
감사합니다,
큰 도움이되었습니다. – devaditya
데이터를 가져 오는 동안 동일한 (시작 및 종료 트랜잭션)을 사용할 수 없다고 생각합니다 ... db에서 데이터를 가져 오는 동안 비슷한 속도 문제가 발생합니다 ... ... – devaditya
확인하십시오. 조회하는 열에 대한 색인이 있습니다. – omz