数据库的使用 总结自:http://www.cnblogs.com/wuhenke/archive/2012/02/07/2341656.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,看着这个其实非常简单啊。