iOS关于SQLite数据库的操作(使用第三方类库FMDB)

转载 2015年11月17日 17:37:07
 

iOS关于SQLite数据库的操作(使用第三方类库FMDB)

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

  2. 获得存放数据库文件的沙盒地址
  3. [objc] view plaincopy在CODE上查看代码片派生到我的代码片
    1. +(NSString *)databaseFilePath  
    2. {  
    3. NSArray *filePath   
    4. = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
    5. NSString *documentPath = [filePath objectAtIndex:0];  
    6. NSLog(@"%@",filePath);  
    7. NSString *dbFilePath = [documentPath stringByAppendingPathComponent:@"db.sqlite"];  
    8. return dbFilePath;   
    9. }  

    1. 创建数据库的操作
    2. [objc] view plaincopy在CODE上查看代码片派生到我的代码片
      1. +(void)creatDatabase  
      2. {  
      3. db = [[FMDatabase databaseWithPath:[self databaseFilePath]] retain];  
      4. }  

    3. 创建表
    4. [objc] view plaincopy在CODE上查看代码片派生到我的代码片
      1. +(void)creatTable  
      2. {  
      3. //先判断数据库是否存在,如果不存在,创建数据库  
      4. if (!db) {  
      5. [self creatDatabase];  
      6. }  
      7. //判断数据库是否已经打开,如果没有打开,提示失败   
      8. if (![db open]) {  
      9. NSLog(@"数据库打开失败");  
      10. return;  
      11. }  
      12.   
      13. //为数据库设置缓存,提高查询效率   
      14. [db setShouldCacheStatements:YES];  
      15.    
      16. //判断数据库中是否已经存在这个表,如果不存在则创建该表  
      17. if(![db tableExists:@"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. 增加表数据
    6. [objc] view plaincopy在CODE上查看代码片派生到我的代码片
      1. +(void)insertPeople:(People *)aPeople  
      2. {  
      3. if (!db) {  
      4. [self creatDatabase];  
      5. }  
      6.    
      7. if (![db open]) {  
      8. NSLog(@"数据库打开失败");  
      9. return;  
      10. }  
      11.    
      12. [db setShouldCacheStatements:YES];  
      13.    
      14. if(![db tableExists:@"people"])  
      15. {  
      16. [self creatTable];  
      17. }  
      18. //以上操作与创建表是做的判断逻辑相同  
      19. //现在表中查询有没有相同的元素,如果有,做修改操作   
      20. FMResultSet *rs = [db executeQuery:@"select * from people where people_id = ?",[NSString stringWithFormat:@"%d",aPeople.peopleID]];  
      21. if([rs next])   
      22. {  
      23. NSLog(@"dddddslsdkien");  
      24. [db executeUpdate:@"update people set name = ?, age = ? where people_id = 1",aPeople.name,[NSString stringWithFormat:@"%d",aPeople.age]];  
      25. }  
      26. //向数据库中插入一条数据   
      27. else{  
      28. [db executeUpdate:@"INSERT INTO people (name, age) VALUES (?,?)",aPeople.name,[NSString stringWithFormat:@"%d",aPeople.age]];  
      29. }  
      30.    
      31.    
      32. }  

    7. 删除数据
    8. [objc] view plaincopy在CODE上查看代码片派生到我的代码片
      1. +(void)deletePeopleByID:(int)ID  
      2. {  
      3. if (!db) {  
      4. [self creatDatabase];  
      5. }  
      6.    
      7. if (![db open]) {  
      8. NSLog(@"数据库打开失败");  
      9. return;  
      10. }  
      11.    
      12. [db setShouldCacheStatements:YES];  
      13.    
      14. //判断表中是否有指定的数据, 如果没有则无删除的必要,直接return  
      15. if(![db tableExists:@"people"])  
      16. {  
      17. return;  
      18. }  
      19. //删除操作   
      20. [db executeUpdate:@"delete from people where people_id = ?", [NSString stringWithFormat:@"%d",ID]];  
      21.    
      22. [db close];  
      23. }  

    9. 修改操作与增加操作的步骤一致

    10. 查询
    11. [objc] view plaincopy在CODE上查看代码片派生到我的代码片
      1. +(NSArray *)getAllPeople  
      2. {  
      3.    
      4. if (!db) {  
      5. [self creatDatabase];  
      6. }  
      7.    
      8. if (![db open]) {  
      9. NSLog(@"数据库打开失败");  
      10. return nil;  
      11. }  
      12.    
      13. [db setShouldCacheStatements:YES];  
      14.    
      15. if(![db tableExists:@"people"])  
      16. {  
      17. return nil;  
      18. }  
      19.   
      20. //定义一个可变数组,用来存放查询的结果,返回给调用者   
      21. NSMutableArray *peopleArray = [[NSMutableArray alloc] initWithArray:0];  
      22. //定义一个结果集,存放查询的数据  
      23. FMResultSet *rs = [db executeQuery:@"select * from people"];  
      24. //判断结果集中是否有数据,如果有则取出数据  
      25. while ([rs next]) {  
      26. People *aPeople = [[People alloc] 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. }  

IOS 之使用FMDB进行SQLite数据库操作——表的创建与修改,以及数据的增删改查和多线程操作数据库

因为IOS中的数据库API在使用上非常复杂繁琐,我们在对SQLite数据库进行操作时通常使用第三方封装的库FMDB FMDB同时兼容ARC和非ARC工程,会自动根据工程配置来调整相关的内存管理代码。...
  • u013087513
  • u013087513
  • 2015年09月29日 20:45
  • 2075

iOS关于SQLite数据库的操作(使用第三方类库FMDB)

首先要先导入第三方类库FMdatabase 获得存放数据库文件的沙盒地址+(NSString *)databaseFilePath { NSArray *filePath = NSSearchPat...
  • egui88
  • egui88
  • 2013年12月03日 19:21
  • 491

iOS SQLite、CoreData、FMDB数据库详解

在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储到数据库。例如前面IOS开发系列—Objective-C之Foundation框架的文章中提到归档、plist文件存储,包括偏...
  • LiChang719
  • LiChang719
  • 2015年07月30日 16:10
  • 2575

iOS开发:使用FMDB插入单引号值" ' "数据到SQLite数据库中

第三方库FMDB直接插入单引号'数据到SQLite数据库中,使用的是uptate命令,执行失败。 方法:需要将单引号'替换成双重单引号''(非双引号)。 若将单引号'替换成加上转义的\',结果仍然是不...
  • jijiji000111
  • jijiji000111
  • 2017年02月21日 17:58
  • 935

ios关于数据库第三方框架FMDB进阶用法

概述 上一篇讲述了FMDB的最基本用法,用到的例子是缓存一张学生表,表里面都是些简单的字段。然而我们在实际项目开发中,大都使用FMDB缓存数据列表,比如网易新闻的新闻列表,QQ动态列表等。遵循M...
  • CloudyBird
  • CloudyBird
  • 2016年03月23日 14:50
  • 1181

FMDB的使用, Sqlite常用语句

项目中加入libsqlite3.dylib这个函式库
  • raoxudong
  • raoxudong
  • 2014年08月08日 16:33
  • 1453

iOS 数据库加密和数据迁移

一、FMDB/SQLCipher数据库加解密,迁移 介绍 使用SQLite数据库的时候,有时候对于数据库要求比较高,特别是在iOS8.3之前,未越狱的系统也可以通过工具拿到应用程序沙盒里面...
  • zrhloveswallow
  • zrhloveswallow
  • 2016年07月06日 18:01
  • 1164

fmdb中databasequeue的使用,避免死锁

在ios开发中,大家很可能会用到这样一个数据库封装:fmdb. 该封装相比coredata来说有他自己的优势:接口清晰,设计简单,符合规范,多线程情况下使用databasequeue来进行操作也很方...
  • openglnewbee
  • openglnewbee
  • 2014年05月21日 11:25
  • 7917

IOS NSData/NSArray数组存储为SQLite blob

IOS NSData/NSArray数组存储为SQLite blob
  • wengyupeng
  • wengyupeng
  • 2016年10月30日 21:45
  • 1873

OC-数据库存储,使用FMDB进行数据库操作

第一种: 一个数据库中,同时存储多张数据表(此处举例为两张表) .h文件 #import  @class GoodsDetailsVO; extern NSString * DataSt...
  • GBKing
  • GBKing
  • 2016年09月19日 16:22
  • 1731
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS关于SQLite数据库的操作(使用第三方类库FMDB)
举报原因:
原因补充:

(最多只允许输入30个字)