程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SyBase數據庫 >> SyBase教程 >> ios數據庫sqlite-第三方框架FMDB,關於線程安全的事務處理

ios數據庫sqlite-第三方框架FMDB,關於線程安全的事務處理

編輯:SyBase教程

ios數據庫sqlite-第三方框架FMDB,關於線程安全的事務處理


導入sqlite3數據庫和第三方框架FMDB

// 1.獲取沙盒路徑

NSString * path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];

path = [path stringByAppendingPathComponent:@"FMDB.sqlite"];

NSLog(@"%@",path);



//2.創建FMDBDataBaseQueue對象並打開()

FMDatabaseQueue * queue = [[FMDatabaseQueue alloc]initWithPath:path];

[queue inDatabase:^(FMDatabase *db) {

NSString * createTable = @"create table if not exists t_person(person_id integer primary key autoincrement,person_name varchar,person_age integer)";// 沒有primary key會創建失敗



BOOL createFlag = [db executeUpdate:createTable];

if (createFlag) {

NSLog(@"創建成功");

}else{

NSLog(@"創建失敗");

}

}];



// // 3.增

// [queue inDatabase:^(FMDatabase *db) {

// NSString * insert = @"insert into t_person(person_name,person_age)values(?,?)";

// for (int i = 0; i < 3; i++) {

// NSString * name = [NSString stringWithFormat:@"jack%i",i];

//// int age = 20+i;

// NSString * age = [NSString stringWithFormat:@"%i",20+i];

//

//// NSLog(@"%@,%@",name,age);

// BOOL insertFlag = [db executeUpdate:insert,name,age];

// if (insertFlag) {

// NSLog(@"插入數據成功");

// }else{

// NSLog(@"插入數據失敗");

// }

// }

//

// }];



// 4.改

[queue inDatabase:^(FMDatabase *db) {

NSString * changeData = @"update t_person set person_age = 99 where person_id = 3";

[db executeUpdate:changeData];

}];



// 5.查

[queue inDatabase:^(FMDatabase *db) {

NSString * select = @"select * from t_person";

FMResultSet * resultSet = [db executeQuery:select];





}];



// 第一種情況 線程安全,解決同時取錢透支問題(上面解決)

// 第二種情況 轉賬:錢劃出去了,進賬:錢劃進來,轉出去了,但因為網絡斷網或者程序出錯等原因未到指定賬戶的問題(下面解決)





// 創建fmdbDataBase對象並打開

FMDatabase * db = [[FMDatabase alloc]initWithPath:path];

[db open];



//買書操作

// 1>扣錢

[db beginDeferredTransaction];//開啟事務

NSString * minusSql = @"update t_money set money=money-10";

BOOL deletaFlag = [db executeUpdate:minusSql];



NSString * addSql = @"insert into t_person (person_name,person_age)values('語文',80)";

BOOL addFlag = [db executeUpdate:addSql];



// 只有都執行成功了才執行,如果有一條不成功就“回滾”

if (deletaFlag&&addFlag) {

[db commit];// 提交事務

NSLog(@"commit");

}else{

[db rollback];// 回滾事務

NSLog(@"rollback");

}



}




// 第一種情況 線程安全,解決同時取錢透支問題(上面解決)

// 第二種情況 轉賬:錢劃出去了,進賬:錢劃進來,轉出去了,但因為網絡斷網或者程序出錯等原因未到指定賬戶的問題(下面解決)

// 第一種情況 線程安全,解決同時取錢透支問題(上面解決)

// 第二種情況 轉賬:錢劃出去了,進賬:錢劃進來,轉出去了,但因為網絡斷網或者程序出錯等原因未到指定賬戶的問題(下面解決)

// 第一種情況 線程安全,解決同時取錢透支問題(上面解決)

// 第二種情況 轉賬:錢劃出去了,進賬:錢劃進來,轉出去了,但因為網絡斷網或者程序出錯等原因未到指定賬戶的問題(下面解決)

// 第一種情況 線程安全,解決同時取錢透支問題(上面解決)

// 第二種情況 轉賬:錢劃出去了,進賬:錢劃進來,轉出去了,但因為網絡斷網或者程序出錯等原因未到指定賬戶的問題(下面解決)

// 第一種情況 線程安全,解決同時取錢透支問題(上面解決)

// 第二種情況 轉賬:錢劃出去了,進賬:錢劃進來,轉出去了,但因為網絡斷網或者程序出錯等原因未到指定賬戶的問題(下面解決)

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved