数据库的使用 总结自: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语句不一样了。