數據庫操作(使用FMDB)

FMDB同時兼容ARC和非ARC工程,會自動根據工程配置來調整相關的內存管理代碼。
FMDB常用類:
FMDatabase : 一個單一的SQLite數據庫,用于執行SQL語句。FMResultSet :執行查詢一個FMDatabase結果集,這個和android的Cursor類似。FMDatabaseQueue :在多個線程來執行查詢和更新時會使用這個類。

**創建數據庫: **
_path存數據庫的一個路經:
可以這么寫
<pre>NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentDirectory = [paths objectAtIndex:0];
NSString *dbPath = [documentDirectory stringByAppendingPathComponent:@"MyDatabase.db"];

db = [FMDatabase databaseWithPath:database_path];
打開數據庫

[db close]
</pre>
第一步:建立數據庫表
<pre>
if (![db open]) { //打開數據庫
NSLog(@“Could not open db.”);
return ;
}
[db executeUpdate:@"CREATE TABLE PersonList (Name text, Age integer, Sex integer, Phone text, Address text, Photo blob)"]; //建表
這里CREATE TABLE 是創建數據庫表的語法 PersonList 這是數據庫表名
(Name text, Age integer, Sex integer, Phone text, Address text, Photo blob)這里意思是建表元素 如name 名稱 text 就是name 類型字段
</pre>

第二步:插入資料
插入資料跟前面一樣,用executeUpdate后面加語法就可以了。比較不同的是,因為插入的資料會跟Objective-C的變數有關,所以在string裡使用?號來代表這些變數。
<pre>[db executeUpdate:@"INSERT INTO PersonList (Name, Age, Sex, Phone, Address, Photo) VALUES (?,?,?,?,?,?)",@"Jone", [NSNumber numberWithInt:20], [NSNumber numberWithInt:0], @“091234567”, @“Taiwan, R.O.C”, [NSData dataWithContentsOfFile: filepath]];</pre>
其中,在SQLite中的text對應到的是NSString,integer對應NSNumber,blob則是NSData。該做的轉換FMDB都做好了,只要了解SQLite語法,應該沒有什麼問題才是。

第三步:更新資料
<pre>[db executeUpdate:@"UPDATE PersonList SET Age = ? WHERE Name = ?",[NSNumber numberWithInt:30],@“John”];</pre>

第四步:讀取資料
取得特定的資料,則需使用FMResultSet物件接收傳回的內容:
<pre>FMResultSet *rs = [db executeQuery:@"SELECT Name, Age, FROM PersonList"];

while ([rs next]) {

NSString *name = [rs stringForColumn:@"Name"];

int age = [rs intForColumn:@"Age"];
}
[rs close];

用[rs next]可以輪詢query回來的資料,每一次的next可以得到一個row裡對應的數值,并用[rs stringForColumn:]或[rs intForColumn:]等方法把值轉成Object-C的型態。取用完資料后則用[rs close]把結果關閉
</pre>
-快速取得資料
在有些時候,只會query某一個row裡特定的一個數值(比方只是要找John的年齡),FMDB提供了幾個比較簡便的方法。這些方法定義在FMDatabaseAdditions.h,如果要使用,記得先import進來。
<pre>//找地址
NSString *address = [db stringForQuery:@"SELECT Address FROM PersonList WHERE Name = ?",@"John”];
//找年齡
int age = [db intForQuery:@"SELECT Age FROM PersonList WHERE Name = ?",@"John”];
</pre>

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容