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

原创 2015年07月10日 11:21:28
////常用的数据库
//客户端: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);
            }

        }

    }
}

JAVA-22-JDBC批处理、获取自增长值、处理大数据文件、数据库事物

一、JDBC进行批处理1.1 为什么要用批处理?   之前:一次操作只能发送一条sql语句到数据库服务器,效率并不高!如果要插入2000条记录,那么必须发送2000条sql语句。(如果IO流的话,一...

java中用事物控制语言调用数据库中的数据,以及调用存储过程或函数

定义一个工具类: package com.etc.util; import java.sql.Connection; import java.sql.DriverManager; import...
  • DOVEty
  • DOVEty
  • 2013年09月18日 12:31
  • 657

C#操作数据库事物使用

  • 2010年04月02日 21:35
  • 21KB
  • 下载

Spring 使用注解方式进行事物管理

事物注解方式: @Transactional当标于类前时, 标示类中所有方法都进行事物处理例子:@Transactional public class TestServiceBean impleme...
  • zhaofsh
  • zhaofsh
  • 2011年03月29日 13:47
  • 7054

sharding-jdbc 使用,进行分库分表以及多数据库间的事物验证

新建Maven项目 pom.xml [html] view plain copy project xmlns="htt...

SQLite数据库使用事物

一、概念           使用事物:           事物特性:可以保证让一系列的操作要么全部完成,要么一个都不会完成。           比如:删除数据和添加数据的操作必须一起完成,...

Spring JPA 使用EntityManager时如何配置多数据源的事物管理

在使用Spring JPA插入数据时 一般使用CrudRepository自带的save方法。但是最近需要定时将云集群里的Scala程序计算的一些指标数据通过消息队列获取后存入本地DB,每次百万级的插...
  • hikeboy
  • hikeboy
  • 2017年07月21日 11:10
  • 173

使用JOTM实现分布式事物管理(多个数据源)

使用spring和hibernate可以很方便的实现一个数据源的事务管理,但是如果需要同时对多个数据源进行事务控制,并且不想使用重量级容器提供的机制的话,可以使用JOTM达到目的. JOTM的配置十...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:创建数据库,并使用事物的方式擦入数据
举报原因:
原因补充:

(最多只允许输入30个字)