第三方庫 FMDB的使用

數據庫的使用 總結自:http://www.cnblogs.com/wuhenke/archive/2012/02/07/2341656.html html

// SQLite的大小寫敏感性,不區分帶小寫。下面的UPDATE 能夠寫成小寫的不過要用雙引號引發來。工程裏的對比着。
// 直到有一次在網路上發現了FMDB這個東西,才發現不是SQLite很難學,而是SQLite的C API對初學者來說實在太麻煩太瑣碎,難度過高,難怪我怎麼學都學不會。 FMDB說穿了其實只是把C API包裝成簡單易用的Objective-C物件。不過這對我這個SQLite初學者來說,但是大大減低了上手的難度。有了FMDB,寫程式時只要專心在SQLite的語法上,而不用去理那堆有看沒有懂的C API,實在是件快樂的事情。
// 1 打開,關閉資料庫
//  使用資料庫的第一件事,就是創建一個資料庫。要注意的是,在ios環境下,只有document directory是能夠進行讀寫的。在寫程序時用的那個Resource資料夾下的東西都是read-only,所以,創建的資料庫要放在document資料夾下。

+ (void)fun1 {
	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(@"Cound not open db");
		return;
	}
	NSLog(@"db : %@", db);
// 這段代碼通常放在viewdidload的函數裏。指定路徑後,用databaseWithPath回傳一個FMDatabase對像,若是該路徑原本就沒有檔案,會新增檔案,否則會開放檔案。最後調用[db open]能夠開放該資料檔案,調用close則關閉檔案。
	
	// 1 創建table
	// 若是是新建的資料庫檔,一開始是沒有table的。創建table的方式很簡單:
	[db executeUpdate:@"CREATE TABLE PersonList(Name text,Age integer,Sex integer,Phone text,Address text,Photo blob)"];
	// [FMDatabase_object executeUpdate:]是FMDB裏面很經常使用的指令,後面的參數用NSString塞入SQLite語法。若是不知道格式,去看看SQLite語法。上述代碼創建了一個名爲PersonList的table,裏面有姓名,年齡,性別,電話,地址,照片。(很範例的一個table)
	
	// 2.插入資料
	// 插入資料和前面同樣,用executeUpdate後面加語法就能夠了。比較不一樣的是,由於插入的資料會跟OC的變量有關,因此在strings裏使用?來代替這些變量。( 若是純OC代碼會用%@代替,每個?後面都會出現它的具體值得。)
	NSString *filePath = @"temporyTesting";
	[db executeUpdate:@"INSERT INTO PersonList(Name text,Age integer,Sex integer,Phone text,Address text,Photo blob) VALUES(?,?,?,?,?,?)", @"Jone", [NSNumber numberWithInt:20], [NSNumber numberWithInt:0], @"091234567", @"Hanghou,h,z", [NSData dataWithContentsOfFile:filePath]];
// 其中,在SQLite中text對應的是NSString, integer對應NSNumber, blob則是NSData。該作的轉換FMDB都作好了,只要瞭解SQLite語法,應該沒有什麼問題。
	
	// 3.更新資料
	[db executeUpdate:@"UPDATE PersonList SET Age = ? WHERE Name = ?", [NSNumber numberWithInt:30], @"John"];
	
	// 4.取的資料
	//  取得特定的資料, 則須要使用FMResultSet對象接收傳回的內容:
	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:]等方法把值轉成OC的型態。取用完資料後則用[rs close]把結果關閉。
	
	
	// 5.快速取得資料
	// 在有些時候,只會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"];
	
}
// 在OC上使用SQLite,看着這個其實很是簡單啊。
在工程中使用時,最好把寫成數據庫管理類,這個類寫成單例。而db對象做爲這個私有對象屬性使用。用來管理數據表的增刪改查,而外部徹底能夠不用db對象的,上面個的1,2,3,4,5,分別能夠寫成方法,該傳的參數由外部傳進來就能夠了。外部把數據傳進來,對數據的增刪改查都是有db操做的,均可以在這個管理類內部實現就能夠了。這代碼示例缺delete的方法,不過和增改的方法同樣用executeUpdate:方法,就是SQLite語句不一樣了。
相關文章
相關標籤/搜索