天天看点

iOS 使用FMDB进行数据库操作(一)

      1、首先要先导入第三方类库FMdatabase。

      2、获得存放数据库文件的沙盒地址。

      View Row Code

1 +(NSString*)databaseFilePath 
2
3
4 NSArray*filePath =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
5 NSString*documentPath =[filePath objectAtIndex:0]; 
6 NSLog(@"%@",filePath); 
7 NSString*dbFilePath =[documentPath stringByAppendingPathComponent:@"db.sqlite"]; 
8 return dbFilePath; 
9
10 }

      3、创建数据库的操作

      View Row Code

1 +(void)creatDatabase 
2
3 db =[[FMDatabasedatabaseWithPath:[selfdatabaseFilePath]]retain]; 
4 }

      4、创建表

      View Row Code

1 +(void)creatTable 
2
3 //先判断数据库是否存在,如果不存在,创建数据库
4 if (!db) { 
5 [selfcreatDatabase]; 
6
7 //判断数据库是否已经打开,如果没有打开,提示失败 
8 if (![db open]) { 
9 NSLog(@"数据库打开失败"); 
10 return; 
11
12
13 //为数据库设置缓存,提高查询效率 
14 [dbsetShouldCacheStatements:YES]; 
15
16 //判断数据库中是否已经存在这个表,如果不存在则创建该表
17 if(![dbtableExists:@"people"]) 
18
19 [db executeUpdate:@"CREATE TABLES people(people_id INTEGER PRIMARY KEY AUTOINCREAMENT, name TEXT, age INTEGER) "]; 
20
21
22 NSLog(@"创建完成"); 
23
24
25 }

      5、增加表数据

      View Row Code

1 +(void)insertPeople:(People*)aPeople 
2
3 if (!db) { 
4 [selfcreatDatabase]; 
5
6
7 if (![db open]) { 
8 NSLog(@"数据库打开失败"); 
9 return; 
10
11
12 [dbsetShouldCacheStatements:YES]; 
13
14 if(![dbtableExists:@"people"]) 
15
16 [selfcreatTable]; 
17
18 //以上操作与创建表是做的判断逻辑相同
19 //现在表中查询有没有相同的元素,如果有,做修改操作 
20 FMResultSet*rs =[dbexecuteQuery:@"select * from people where people_id = ?",[NSStringstringWithFormat:@"%d",aPeople.peopleID]]; 
21 if([rs next]) 
22
23 NSLog(@"dddddslsdkien"); 
24 [dbexecuteUpdate:@"update people set name = ?, age = ? where people_id = 1",aPeople.name,[NSStringstringWithFormat:@"%d",aPeople.age]]; 
25
26 //向数据库中插入一条数据 
27 else{ 
28 [dbexecuteUpdate:@"INSERT INTO people (name, age) VALUES (?,?)",aPeople.name,[NSStringstringWithFormat:@"%d",aPeople.age]]; 
29
30
31 }

      6、删除数据

      View Row Code

1 +(void)deletePeopleByID:(int)ID
2
3 if (!db) { 
4 [selfcreatDatabase]; 
5
6
7 if (![db open]) { 
8 NSLog(@"数据库打开失败"); 
9 return; 
10
11
12 [dbsetShouldCacheStatements:YES]; 
13
14 //判断表中是否有指定的数据, 如果没有则无删除的必要,直接return
15 if(![dbtableExists:@"people"]) 
16
17 return; 
18
19 //删除操作 
20 [db executeUpdate:@"delete from people where people_id = ?", [NSStringstringWithFormat:@"%d",ID]]; 
21
22 [db close]; 
23 }

      7、修改操作与增加操作的步骤一致

      8、查询

      View Row Code

1 +(NSArray*)getAllPeople 
2
3
4 if (!db) { 
5 [selfcreatDatabase]; 
6
7
8 if (![db open]) { 
9 NSLog(@"数据库打开失败"); 
10 returnnil; 
11
12
13 [dbsetShouldCacheStatements:YES]; 
14
15 if(![dbtableExists:@"people"]) 
16
17 returnnil; 
18
19
20 //定义一个可变数组,用来存放查询的结果,返回给调用者 
21 NSMutableArray*peopleArray =[[NSMutableArrayalloc]initWithArray:0]; 
22 //定义一个结果集,存放查询的数据
23 FMResultSet*rs =[dbexecuteQuery:@"select * from people"]; 
24 //判断结果集中是否有数据,如果有则取出数据
25 while ([rs next]) { 
26 People*aPeople =[[Peoplealloc]init]; 
27
28 aPeople.peopleID =[rs intForColumn:@"people_id"]; 
29 aPeople.name =[rs stringForColumn:@"name"]; 
30 aPeople.age =[rs intForColumn:@"age"]; 
31 //将查询到的数据放入数组中。 
32 [peopleArray addObject:aPeople]; 
33
34 return[peopleArray autorelease]; 
35 }

作者: lzz900201