iOS FMDB小試了一下

2022-02-16 04:21:08 字數 2566 閱讀 3942

今天從早上9點,一直在看fmdb,知道中午11:40。我的效率是不是很低下。中間也碰到了幾個小bug。

雖然做了乙個小demo,但是覺得還比不上在專案中使用中鍛鍊的多,先暫且一總結。

引入到專案中;

新增庫;

新建專案,開始使用

下面我們就一條條地說:

fmdb裡面的『fmdb』,引入到專案中,其他的可以不要;

在link binary with libraries 裡面,引入libsqlite3.dylib;

在viewcontroller裡面,引入標頭檔案

#import #import "fmdb.h"

準備工作已經完畢,我們正式開始寫**,首先,我們要明白的是:fmdb,是封裝sqlite了,sqlite是用c語言寫的,我們這裡面,也要用到c語言。既然是sqlite,那自然會涉及到增刪改查,我們就仔細說說這幾個功能。

1.在進行增刪改查之前,我們要先建立乙個資料庫,這樣我們才能操作:

//取得document路徑

nsstring * documentpath = [nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes)objectatindex:0];

nslog(@"dbpath = %@",dbpath);

//建立資料庫

/**1、當資料庫檔案不存在時,fmdb會自己建立乙個。

2、如果你傳入的引數是空串:@"" ,則fmdb會在臨時檔案目錄下建立這個資料庫,資料庫斷開連線時,資料庫檔案被刪除。

3、如果你傳入的引數是 null,則它會建立乙個在記憶體中的資料庫,資料庫斷開連線時,資料庫檔案被刪除。

*/fmdatabase * db = [fmdatabase databasewithpath:dbpath];

這樣資料庫檔案就建立完了,而且還能保證它能夠開啟,一般情況下都是能夠開啟的:

if (![db open]) else

2.資料庫建立完之後,我們就要建乙個表了,用來分門別類存放屬性

//建立table

if ([db open]) else

[db close];

}else

3.插入資料

/**

* -插入資料

插入資料跟前面一樣,用executeupdate後面加語法就可以了。比較不同的是,因為插入的資料會跟objective-c的變數有關,所以在string裡使用?號來代表這些變數。

*/if ([db open]) else

[db close];

}

4.更新資料

一切不是select命令的命令都視為更新。這包括  create, update, insert,alter,commit, begin, detach, delete, drop, end, explain, vacuum, and replace  (等)。

簡單來說,只要不是以select開頭的命令都是update命令。

執行更新返回乙個bool值。yes表示執行成功,否則表示有那些錯誤 。你可以呼叫 -lasterrormessage 和 -lasterrorcode方法來得到更多資訊。

if ([db open]) else

}

5.查詢

if ([db open]) 

}

6.刪除

if ([db open]) else

[resultset close];

}

7.建立佇列

如果應用中使用了多執行緒運算元據庫,那麼就需要使用fmdatabasequeue來保證執行緒安全了。 應用中不可在多個執行緒中共同使用乙個fmdatabase物件運算元據庫,這樣會引起資料庫資料混亂。 為了多執行緒運算元據庫安全,fmdb使用了fmdatabasequeue,使用fmdatabasequeue很簡單,首先用乙個資料庫檔案位址來初使化fmdatabasequeue,然後就可以將乙個閉包(block)傳入indatabase方法中。 在閉包中運算元據庫,而不直接參與fmdatabase的管理。

//建立佇列

fmdatabasequeue * databasequeue = [fmdatabasequeue databasequeuewithpath:dbpath];

[databasequeue indatabase:^(fmdatabase *db)

}];

fmresultset  提供了很多方法來獲得所需的格式的值:

intforcolumn:

longforcolumn:

longlongintforcolumn:

boolforcolumn:

doubleforcolumn:

stringforcolumn:

dataforcolumn:

datanocopyforcolumn:

utf8stringforcolumnindex:

objectforcolumn:

測試了一下LINQ寫的Quick Sort效能

昨晚看到乙個帖子,說的是三行 實現快速排序,文中實現quick sort 如下 public static ienumerable quicksort ienumerable list where t icomparable 不由想起老趙兩年前 正好整整兩年傳統的的quick sort演算法摘自維基...

測試了一下LINQ寫的Quick Sort效能

昨晚看到乙個帖子,說的是三行 實現快速排序,文中實現quick sort 如下 public static ienumerable quicksort ienumerable list where t icomparable 不由想起老趙兩年前 正好整整兩年 的乙個帖子 趣味程式設計 函式式鍊錶的快...

shell命令程式設計小例 試了一下很好

程式目的 設計乙個shell程式,分別實現1 鎖定終端螢幕,2 選擇檔案編輯器編輯檔案,3 啟動您所想要啟動的工具,4 使用c檔案輸出當地時間 四個功能 程式分析 鎖定終端螢幕過程需要忽略sighup,sigint,sigquit,sigterm,sigtstp訊號,呼叫trap命令,然後設定乙個密...