數據庫的使用 總結自: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語句不一樣了。