• DBTransaction


    //  Created by  张国锋 on 15-7-23.
    //  Copyright (c) 2014年  张国锋. All rights reserved.
    //
    
    #import "AppDelegate.h"
    #import "RootViewController.h"
    
    @implementation AppDelegate
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        // Override point for customization after application launch.
        RootViewController *root = [[RootViewController alloc] init];
        self.window.rootViewController =root;
        self.window.backgroundColor = [UIColor whiteColor];
        [self.window makeKeyAndVisible];
        return YES;
    }
    
    
    
    //
    //  RootViewController.m
    //  DBTransaction  -FMDB
    //
    //  Created by  张国锋 on 15-7-23.
    //  Copyright (c) 2014年  张国锋. All rights reserved.
    //
    
    #import "RootViewController.h"
    #import "FMDatabase.h"
    //需要导入libsqlite3.dylib系统库
    @interface RootViewController ()
    {
        FMDatabase *_dataBase;
    }
    @end
    
    @implementation RootViewController
    
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            // Custom initialization
        }
        return self;
    }
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        NSString *dbPath = [NSHomeDirectory() stringByAppendingFormat:@"/Documents/test.db"];
        //初始化
        _dataBase = [[FMDatabase alloc] initWithPath:dbPath];
        if ([_dataBase open]) {
           //创建表
            NSString *createSql = @"create table if not exists student(id integer,name varchar(256))";
            if (![_dataBase executeUpdate:createSql]) {
                NSLog(@"create error:%@",_dataBase.lastErrorMessage);
            }
        }
        //NSDate 时间类
        NSDate *date1 = [NSDate date];//获取系统当前时间
        [self insertDataWithCount:1000 isUseTransaction:YES];
        NSDate *date2 = [NSDate date];
        //取到时间的差值  (timeIntervalSinceDate 两个时间的差值,单位是秒)
        //NSTimeInterval 时间差变量,秒
        NSTimeInterval time = [date2 timeIntervalSinceDate:date1];
        NSLog(@"time:%f",time);
        
    	// Do any additional setup after loading the view.
    }
    //插入批量数据,是否手动启用事务
    - (void)insertDataWithCount:(NSInteger)count isUseTransaction:(BOOL)isUse{
        if (isUse) {
            //手动启用事务
            BOOL isError = NO;
            @try {
             //写可能出现异常的代码
                [_dataBase beginTransaction];//手动开启一个事务
                for (int i=0; i<count; i++) {
                    NSString *idStr =[NSString stringWithFormat:@"%d",i];
                    NSString *stName = [NSString stringWithFormat:@"student%d",i];
                    NSString *insertSql = @"insert into student(id,name) values(?,?)";
                    if (![_dataBase executeUpdate:insertSql,idStr,stName]) {
                        NSLog(@"insert error:%@",_dataBase.lastErrorMessage);
                    }
                }
            }
            @catch (NSException *exception) {
              //捕获到异常
                NSLog(@"error:%@",exception.reason);
                isError = YES;
                [_dataBase rollback];//回滚,回到最初的状态
            }
            @finally {
               //无论有没有异常,代码都会执行到此处
                if (isError==NO) {
                    [_dataBase commit];//提交事务,让批量操作生效
                    
                     
                }
            }
        }else{
           //常规操作
            for (int i=0; i<count; i++) {
                NSString *idStr =[NSString stringWithFormat:@"%d",i];
                NSString *stName = [NSString stringWithFormat:@"student%d",i];
                NSString *insertSql = @"insert into student(id,name) values(?,?)";
                if (![_dataBase executeUpdate:insertSql,idStr,stName]) {
                    NSLog(@"insert error:%@",_dataBase.lastErrorMessage);
                }
            }
        }
    }
    
    
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    @end
    
    //清除缓存
    
    [[SDImageCache sharedImageCache]getSize]
    
    
    {
    [[SDImageCache sharedImageCache] clearDisk];
        [[SDImageCache sharedImageCache] clearMemory];
     [[NSURLCache sharedURLCache] removeAllCachedResponses];
        //清除cookies
        NSHTTPCookie *cookie;
        NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
        for (cookie in [storage cookies])  {
            [storage deleteCookie:cookie];
        }
    }
    
    + (void)cancelWebCache
    {
        [[NSURLCache sharedURLCache] removeAllCachedResponses];
        //清除cookies
        NSHTTPCookie *cookie;
        NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
        for (cookie in [storage cookies])  {
            [storage deleteCookie:cookie];
        }
    }
    
  • 相关阅读:
    linux IPtable防火墙 禁止和开放端口
    Forward链、Input链和Output链的区别
    linux下导入、导出mysql数据库命令
    linux 环境下tomcat中部署jfinal项目
    android 调用系统界面
    效果超赞的基于js的chat组件和图形动画组件
    《Tsinghua oc mooc》第5~7讲 物理内存管理
    《Tsinghua os mooc》第1~4讲 启动、中断、异常和系统调用
    《MIT 6.828 Homework 2: Shell》解题报告
    《xv6 Appendices: PC Hardware and Boot loader》学习笔记
  • 原文地址:https://www.cnblogs.com/0515offer/p/4695949.html
Copyright © 2020-2023  润新知