常用的数据库
//客户端:sqlite3
//服务器:oracle(Sun)、sybase、sqlserver、mysql、db2
//数据库的事物 ,有时候操作很多条sql语句时,会执行很长的时间,我们把这些语句放到一个事务中,可以提高效率
//下面取两个时间值可以比较出使用事物和不使用事物的时间差距
//创建数据库的方法
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/test.db"];
_database = [[FMDatabase alloc] initWithPath:path];
NSLog(@"%@",path);
BOOL flag = [_database open];
if (!flag) {
NSLog(@"打开数据库失败");
}else{
//创建表
NSString *sql = @"create table if not exists user(username varchar(255),age integer)";
BOOL ret = [_database executeUpdate:sql];
if (!ret) {
NSLog(@"创建表失败");
}
}
//取第一个时间值
//插入数据
NSDate *date1 = [NSDate date];
//调用插入数据的方法,YES为使用事物插入,NO为不使用事物插入;
[self insertDataWithNum:1000 isUserTransaction:YES];
//取第二个时间值
NSDate *date2 = [NSDate date];
//两个时间值比较得出差值
NSTimeInterval time = [date2 timeIntervalSinceDate:date1];
NSLog(@"%lf",time);
//插入数据的方法
- (void)insertDataWithNum:(int)num isUserTransaction:(BOOL)useTransaction
{
if (useTransaction) {
//使用事物
BOOL isError = NO;
@try {
//开启事物
[_database beginTransaction];
//执行插入操作
for (int i=0; i<num; i++) {
NSString *name = [NSString stringWithFormat:@"第%d个用户",i];
int age = arc4random()%20+20;
NSString *insertSql = @"insert into user (username,age) values (?,?)";
BOOL ret = [_database executeUpdate:insertSql,name,@(age)];
if (!ret) {
NSLog(@"%@",_database.lastErrorMessage);
}
}
}
@catch (NSException *exception) {
//出错
isError = YES;
//回滚
[_database rollback];
}
@finally {
if (!isError) {
//提交事物
NSLog(@"success");
[_database commit];
}
}
}else{
//不使用事物
for (int i=0; i<num; i++) {
NSString *name = [NSString stringWithFormat:@"第%d个用户",i];
int age = arc4random()%20+20;
NSString *insertSql = @"insert into user (username,age) values (?,?)";
BOOL ret = [_database executeUpdate:insertSql,name,@(age)];
if (!ret) {
NSLog(@"%@",_database.lastErrorMessage);
}
}
}
}
创建数据库,并使用事物的方式擦入数据
最新推荐文章于 2024-07-13 18:10:19 发布