iOS資料持久化—FMDB資料庫隊列

來源:互聯網
上載者:User

標籤:style   blog   http   io   ar   color   os   sp   for   

iOS開發資料庫篇—FMDB資料庫隊列

一、程式碼範例

1.需要先匯入FMDB架構和標頭檔,由於該架構依賴於libsqlite庫,所以還應該匯入該庫。

2.代碼如下:

 1 // 2 //  YYViewController.m 3 //  05-FMDB資料庫隊列 4 // 5 //  Created by apple on 14-7-28. 6 //  Copyright (c) 2014年 wendingding. All rights reserved. 7 // 8  9 #import "YYViewController.h"10 #import "FMDB.h"11 12 @interface YYViewController ()13 @property(nonatomic,strong)FMDatabaseQueue *queue;14 @end15 16 @implementation YYViewController17 18 - (void)viewDidLoad19 {20     [super viewDidLoad];21     22     //1.獲得資料庫檔案的路徑23     NSString *doc=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];24     NSString *fileName=[doc stringByAppendingPathComponent:@"person.sqlite"];25     26     //2.獲得資料庫隊列27     FMDatabaseQueue *queue=[FMDatabaseQueue databaseQueueWithPath:fileName];28 //    FMDatabase *db=[FMDatabase databaseWithPath:fileName];29     30     //3.開啟資料庫31     [queue inDatabase:^(FMDatabase *db) {32          BOOL result=[db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_person (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);"];33         if (result) {34             NSLog(@"創表成功");35         }else36         {37             NSLog(@"創表失敗");38         }39     }];40     self.queue=queue;41     42 }43 44 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event45 {46     //插入資料47 //    [self.queue inDatabase:^(FMDatabase *db) {48 //        [db executeUpdate:@"INSERT INTO t_person (name, age) VALUES (?, ?);",@"wendingding", @22];49 //    }];50     51     //查詢資料52     [self.queue inDatabase:^(FMDatabase *db) {53         // 1.執行查詢語句54         FMResultSet *resultSet = [db executeQuery:@"SELECT * FROM t_person"];55 56         // 2.遍曆結果57         while ([resultSet next]) {58             int ID = [resultSet intForColumn:@"id"];59             NSString *name = [resultSet stringForColumn:@"name"];60             int age = [resultSet intForColumn:@"age"];61             NSLog(@"%d %@ %d", ID, name, age);62         }63     }];64 65 }66 67 @end
View Code

 

先插入資料,之後查詢結果,列印如下:

3.代碼說明

有了一個隊列對象,它的內部自動就擁有一個資料庫物件,且資料庫的操作是安全執行緒的。 二、事務事務,沒有事務的話會出現問題。舉例:銀行的例子 張三和李四賬戶都有1000塊錢,如果張三要轉賬給李四,需要執行兩條SQL語句,考慮到安全性,要求這兩條魚具要麼全部執行成功,要不全部執行失敗。事務:把多條語句放到同一個事務中,要麼全部成功,要不全部失敗(如果中途出現問題,那麼會自動復原)。事務的執行具有原子性。  事務代碼處理:  把多條語句添加到一個事務中去執行:
//插入資料    [self.queue inDatabase:^(FMDatabase *db) {        [db beginTransaction];        [db executeUpdate:@"INSERT INTO t_person (name, age) VALUES (?, ?);",@"wendingding", @22];        [db executeUpdate:@"INSERT INTO t_person (name, age) VALUES (?, ?);",@"wendingding", @23];        [db executeUpdate:@"INSERT INTO t_person (name, age) VALUES (?, ?);",@"wendingding", @24];        [db executeUpdate:@"INSERT INTO t_person (name, age) VALUES (?, ?);",@"wendingding", @25];        [db commit];    }];
View Code

 

如果中途出現問題,那麼會自動復原,也可以選擇手動復原。

//插入資料    [self.queue inDatabase:^(FMDatabase *db) {        [db beginTransaction];        [db executeUpdate:@"INSERT INTO t_person (name, age) VALUES (?, ?);",@"wendingding", @22];        [db executeUpdate:@"INSERT INTO t_person (name, age) VALUES (?, ?);",@"wendingding", @23];        [db executeUpdate:@"INSERT INTO t_person (name, age) VALUES (?, ?);",@"wendingding", @24];        [db rollback];        [db executeUpdate:@"INSERT INTO t_person (name, age) VALUES (?, ?);",@"wendingding", @25];        [db commit];    }];
View Code

 

上面的代碼。前三條插入語句是作廢的。

交易處理的另一種方式:

1    [self.queue inTransaction:^(FMDatabase *db, BOOL *rollback) {2         [db executeUpdate:@"INSERT INTO t_person (name, age) VALUES (?, ?);",@"wendingding", @22];3         [db executeUpdate:@"INSERT INTO t_person (name, age) VALUES (?, ?);",@"wendingding", @23];4         [db executeUpdate:@"INSERT INTO t_person (name, age) VALUES (?, ?);",@"wendingding", @24];5     }];

說明:先開事務,再開始事務,之後執行block中的程式碼片段,最後提交事務。

iOS資料持久化—FMDB資料庫隊列

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.