我正在使用sqlite3进行iPhone开发,我试图将一些插入语句包装到事务中.目前,我有下面的代码,它正在正常工作,但在阅读了另一个问题后,我意识到这将是一个交易而不是一个交易会更好.我找不到C API调用来开始和提交一个事务.一些代码在Objective-C中,但我不认为这是真正的问题.
- - (void)saveAnimals {
- //Insert all the animals into the zoo database
- int i;
- const char *sql = "insert into Animal(Zoo_ID,Animal_Num,Animal_Text) Values(?,?,?)";
- for (i = 0; i < ([[self animalArray] count] - 1); i++) {
- if(addStmt == nil) {
- if(sqlite3_prepare_v2(database,sql,-1,&addStmt,NULL) != sqlITE_OK)
- NSAssert1(0,@"Error while creating add statement. '%s'",sqlite3_errmsg(database));
- }
- int animalNum = [[[self animalArray] objectAtIndex:i] animal_Number];
- NSString *animalText = [[NSString alloc] initWithString:[[[self animalArray] objectAtIndex:i] animal_Text]];
- sqlite3_bind_int(addStmt,1,zoo_ID);
- sqlite3_bind_int(addStmt,2,animalNum);
- sqlite3_bind_text(addStmt,3,[animalText UTF8String],sqlITE_TRANSIENT);
- [animalText release];
- if(sqlITE_DONE != sqlite3_step(addStmt)) {
- NSAssert1(0,@"Error while inserting data. '%s'",sqlite3_errmsg(database));
- }
- //Reset the add statement.
- sqlite3_reset(addStmt);
- }
- }
我认为需要做的是将sqlite3_prepare_v2命令从for循环中取出,启动事务,通过for循环,提交事务.但是,我不知道“启动事务”和“提交事务”的调用是什么.我还会用sqlite3_step吗?谢谢你的帮助.