您的位置:首页 > 数据库

创建数据库,并使用事物的方式擦入数据

2015-07-10 11:21 387 查看
////常用的数据库
//客户端: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);
}

}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库