我是iphone开发的新手.我想在我的sqlite3数据库中插入多个值并在tableview中显示内容.我能够将单行数据插入到我的数据库中并检索它并显示数据但我不能插入多行数据.这是我的代码......
-(void)initializeTableData { sqlite3 *db=[DatabaseTestAppDelegate getNewDBConnection]; sqlite3_stmt *statement=nil; sqlite3_stmt *statement1=nil; if (insert_MyObj_statement == nil) { const char sql2[] = "DELETE FROM user"; sqlite3_prepare_v2(db, sql2, -1, &statement1, NULL); sqlite3_step(statement1); const char sql1[] = "INSERT INTO user (id,name) VALUES ('0','xxx')"; int result=sqlite3_prepare_v2(db, sql1, -1, &insert_MyObj_statement, NULL); } sqlite3_step(insert_MyObj_statement); const char sql[] = "select * from user"; if(sqlite3_prepare_v2(db, sql, -1, &statement, NULL)!=SQLITE_OK) { NSAssert1(0,@"error in preparing staement",sqlite3_errmsg(db)); } else { while(sqlite3_step(statement)==SQLITE_ROW) [tableData addObject:[NSString stringWithFormat:@"%s",(char*)sqlite3_column_text(statement,1)]]; } sqlite3_finalize(statement); }
有没有其他方法可以在我的表中插入多行数据.请帮帮我.谢谢.
这是我通常用于批量插入数据的例程.
static sqlite3 *masterDB; static sqlite3_stmt *init_statement = nil; { NSString* statement; statement = @"BEGIN EXCLUSIVE TRANSACTION"; if (sqlite3_prepare_v2(masterDB, [statement UTF8String], -1, &init_statement, NULL) != SQLITE_OK) { printf("db error: %s\n", sqlite3_errmsg(masterDB)); return NO; } if (sqlite3_step(init_statement) != SQLITE_DONE) { sqlite3_finalize(init_statement); printf("db error: %s\n", sqlite3_errmsg(masterDB)); return NO; } NSTimeInterval timestampB = [[NSDate date] timeIntervalSince1970]; NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"MMM dd, yyyy"]; NSDate *now = [NSDate date]; NSString *dateTime = [dateFormat stringFromDate:now]; [dateFormat release]; statement = @"insert into table(id, name) values(?,?)"; sqlite3_stmt *compiledStatement; if(sqlite3_prepare_v2(masterDB, [statement UTF8String], -1, &compiledStatement, NULL) == SQLITE_OK) { for(int i = 0; i < [aryList count]; i++){ NSString *objName = [aryList objectAtIndex:i]; sqlite3_bind_int(compiledStatement, 1, i ); sqlite3_bind_text(compiledStatement, 2, [objName UTF8String], -1, SQLITE_TRANSIENT); while(YES){ NSInteger result = sqlite3_step(compiledStatement); if(result == SQLITE_DONE){ break; } else if(result != SQLITE_BUSY){ printf("db error: %s\n", sqlite3_errmsg(masterDB)); break; } } sqlite3_reset(compiledStatement); } timestampB = [[NSDate date] timeIntervalSince1970] - timestampB; NSLog(@"Insert Time Taken: %f",timestampB); // COMMIT statement = @"COMMIT TRANSACTION"; sqlite3_stmt *commitStatement; if (sqlite3_prepare_v2(masterDB, [statement UTF8String], -1, &commitStatement, NULL) != SQLITE_OK) { printf("db error: %s\n", sqlite3_errmsg(masterDB)); return NO; } if (sqlite3_step(commitStatement) != SQLITE_DONE) { printf("db error: %s\n", sqlite3_errmsg(masterDB)); return NO; } sqlite3_finalize(compiledStatement); sqlite3_finalize(commitStatement); return YES; } return YES; }