FMDB方式访问 sqlite 数据库

前端之家收集整理的这篇文章主要介绍了FMDB方式访问 sqlite 数据库前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

以下介紹幾個常用的指令,分享給大家:

-開啟/關閉資料庫

使用資料庫的第一件事,就是建立一個資料庫。要注意的是,在iOS環境下,只有document directory 是可以進行讀寫的。在寫程式時用的那個Resource資料夾底下的東西都是read-only。因此,建立的資料庫要放在document 資料夾下。方法如下:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);

NSString *documentDirectory = [paths objectAtIndex:0];

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

FMDatabase

*db = [FMDatabase databaseWithPath:dbPath] ;

if (![db open]) {

NSLog(@“Could not open db.”);

return ;

}

通常這段程式碼會放在UIViewController中viewDidLoad的函式裡。指定路徑後,用[FMDatabase databaseWithPath:]回傳一個FMDatabase物件,如果該路徑本來沒有檔案,會新增檔案,不然會開啟舊檔。最後呼叫[db open]可以開啟該資料庫檔案,[db close]則關閉該檔案。

-建立table

如果是新建的資料庫檔,一開始是沒有table的。建立table的方式很簡單:

[db executeUpdate:@"CREATE TABLE PersonList (Name text,Age integer,Sex integer,Phone text,Address text,Photo blob)"];

這是FMDB裡很常用的指令,[FMDatabase_object executeUpdate:]後面用NSString塞入sqlite語法,就解決了。因為這篇主要是在講FMDB,所以sqlite的語法就不多說了,上述程式碼建立了一個名為PersonList的table,裡面有姓名、年齡、性別、電話、地址和照片。(嗯….很範例的一個table)

-插入資料

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

[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對應到的是NSString,integer對應NSNumber,blob則是NSData。該做的轉換FMDB都做好了,只要了解sqlite語法,應該沒有什麼問題才是。

-更新資料

太簡單了,不想講,請看範例:

[db executeUpdate:@"UPDATE PersonList SET Age = ? WHERE Name = ?",[NSNumber numberWithInt:30],@“John”];

-取得資料

取得特定的資料,則需使用FMResultSet物件接收傳回的內容:

FMResultSet *rs = [db executeQuery:@"SELECT Name,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]把結果關閉。

快速取得資料

在有些時候,只會query某一個row裡特定的一個數值(比方只是要找John的年齡),FMDB提供了幾個比較簡便的方法。這些方法定義在FMDatabaseAdditions.h,如果要使用,記得先import進來。

//找地址

NSString *address = [db stringForQuery:@"SELECT Address FROM PersonList WHERE Name = ?",@"John”];

//找年齡

int age = [db intForQuery:@"SELECT Age FROM PersonList WHERE Name = ?",@"John”];

猜你在找的Sqlite相关文章