本人ios初學(xué)者,為自己學(xué)習(xí)方便,復(fù)制各位大神的學(xué)習(xí)性文章放在自己簡書里,僅作為自己學(xué)習(xí)方便使用,如果作者疑此行為侵權(quán),請隨時(shí)聯(lián)系本人刪除,如有共同學(xué)習(xí)者復(fù)制此文章,請注明原出處
首先下載FMDB的source code,接著在解開的檔案裡,把src資料夾下
除了fmdb.m的檔案加入到自己的iOS專案,最后在專案中加入libsqlite3.dylib這個(gè)函式庫就可以了。啥?有人問為什麼不用加入fmdb.m?簡單講,這個(gè)檔案
是fmdb的使用說明。裡面的註解清楚,范例又簡單,如果有興趣,直接看fmdb.m,
大概就會(huì)用fmdb了。
以下介紹幾個(gè)常用的指令,分享給大家:
-打開/關(guān)閉資料庫
使用資料庫的第一件事,就是建立一個(gè)資料庫。要注意的是,在iOS環(huán)境下,只
有document directory是可以進(jìn)行讀寫的。在寫程式時(shí)用的那個(gè)Resource資料
夾底下的東西都是read-only。因此,建立的資料庫要放在document資料夾下。
方法如下:
NSArray *paths =
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *documentDirectory = [paths objectAtIndex:0];
NSString *dbPath =
stringByAppendingPathComponent:@"MyDatabase.db"];
[documentDirectory
FMDatabase *db = [FMDatabase databaseWithPath:dbPath] ;
if (![db open]) {
NSLog(@“Could not open db.”);
return ;
}
建立table
如果是新建的資料庫檔,一開始是沒有table的。建立table的方式很簡單:1
[db executeUpdate:@"CREATE TABLE PersonList (Name text, Age integer,
Sex integer, Phone text, Address text, Photo blob)"];
這 是FMDB裡 很 常 用 的 指 令 ,[FMDatabase_object executeUpdate:]后 面 用NSString塞入SQLite語法,就解決了。因?yàn)檫@篇主要是在講FMDB,所以SQLite的語法就不多說了,上述程式碼建立了一個(gè)名為PersonList的table,裡面有姓
名、年齡、性別、電話、地址和照片。(嗯....很范例的一個(gè)table)
-插入資料
插入資料跟前面一樣,用executeUpdate后面加語法就可以了。比較不同的是,
因?yàn)椴迦氲馁Y料會(huì)跟Objective-C的變數(shù)有關(guān),所以在string裡使用?號來代表這
些變數(shù)。
[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]];
其中,在SQLite中的text對應(yīng)到的是NSString,integer對應(yīng)NSNumber,blob則是NSData。該做的轉(zhuǎn)換FMDB都做好了,只要了解SQLite語法,應(yīng)該沒有什麼問題才是。
-更新資料
太簡單了,不想講,請看范例:
[db executeUpdate:@"UPDATE PersonList SET Age = ? WHERE Name
= ?",[NSNumber numberWithInt:30],@“John”];
-取得資料
取得特定的資料,則需使用FMResultSet物件接收傳回的內(nèi)容:
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可以得到一個(gè)row裡對
應(yīng)的數(shù)值,并用[rs stringForColumn:]或[rs intForColumn:]等方法把值轉(zhuǎn)成Object-C的型態(tài)。取用完資料后則用[rs close]把結(jié)果關(guān)閉。
-快速取得資料
在有些時(shí)候,只會(huì)query某一個(gè)row裡特定的一個(gè)數(shù)值(比方只是要找John的
年齡),FMDB提供了幾個(gè)比較簡便的方法。這些方法定義在FMDatabaseAdditions.h,如果要使用,記得先import進(jìn)來。
view source
//找地址
NSString *address = [db stringForQuery:@"SELECT Address FROM
PersonList WHERE Name = ?",@"John”];
//找年齡
int age = [db intForQuery:@"SELECT Age FROM PersonList WHERE Name
= ?",@"John”];