第三方库 FMDB的使用

数据库的使用 总结自: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,看着这个其实非常简单啊。



在工程中使用时,最好把写成数据库管理类,这个类写成单例。而db对象作为这个私有对象属性使用。用来管理数据表的增删改查,而外部完全可以不用db对象的,上面个的1,2,3,4,5,分别可以写成方法,该传的参数由外部传进来就可以了。外部把数据传进来,对数据的增删改查都是有db操作的,都可以在这个管理类内部实现就可以了。这代码示例缺delete的方法,不过和增改的方法一样用executeUpdate:方法,就是SQLite语句不同了。

你可能感兴趣的:(第三方库 FMDB的使用)