iOS开发FMDB
来源:互联网 发布:voip软件电话 编辑:程序博客网 时间:2024/05/22 07:08
一、概述
FMDB是iOS平台的SQLite数据库框架,用OC的方式封装了SQLite的C语言API,使用起来更加面向对象,省去了冗余的C语言代码,比苹果自家的CoreData框架更加灵活,提供了多线程安全的数据库操作方法,防止才出现数据混乱现象。
FMDB有三个核心类:FMDatabase(用来执行SQL语句,一个FMDBDatabase对象代表一个单独的SQLite数据库);FMResultSet(执行查询后的结果集);FMDatabaseQueue(多线程中执行多个查询或更新)。
二、示例代码
(1)首先导入libsqlite3.tbd库文件并且在github上(https://github.com/ccgus/fmdb)下载FMDB框架导入工程
(2)创建数据库路径
文件路径有三种情况:1.具体文件路径(如果不存在会自动创建);
2.传入的参数是空字符串@“”,会在临时目录下创建这个数据库,当FMDB断开连接的时候会删除这个数据库文件。
3.传入的参数是NULL,会创建一个在内存中的数据库,断开连接时数据库文件被删除。
//获取Document路径 NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]; //在此路径下新建一个文件 NSString *fliepath = [doc stringByAppendingPathComponent:@"student.sqlite"];
(3)创建数据库
//创建一个数据库 FMDatabase *database = [FMDatabase databaseWithPath:fliepath ];
(4)创建列表
//创建列表 if ([database open]) { BOOL result = [database executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);"]; if (result ) { NSLog(@"列表创建成功"); }else{ NSLog(@"列表创建失败"); } }
(5)对列表进行增删改查操作
增:
#pragma mark -- 增 (插入数据)-(void)insert{ if ([self.database open]) { for (int i = 0; i < 5 ; i ++) { NSString *name = [NSString stringWithFormat:@"xiao-%d",i]; [self.database executeUpdate:@"INSERT INTO t_student (name, age) VALUES (?, ?);",name,@(arc4random()%40)]; } //关闭数据库 [self.database close]; }}
删一个:
#pragma mark -- 删除某一条数据-(void)deleteOne{ if ([self.database open]) { NSString *deleteOneSQL = [NSString stringWithFormat:@"delete from t_student where name = '%@'",@"xiao-0"]; [self.database executeUpdate:deleteOneSQL]; [self.database close]; }}
全部删除:
#pragma mark -- 删除所有的数据-(void)deleteAll{ if ([self.database open]) { [self.database executeUpdate:@"DROP TABLE IF EXISTS t_student;"]; [self.database close]; } }
改数据:
#pragma mark -- 修改数据-(void)change{ if ([self.database open]) { NSString *changeSQL = [NSString stringWithFormat:@"UPDATE t_student SET name = '%@' WHERE id = '%d'",@"xiao-9",2]; [self.database executeUpdate:changeSQL]; [self.database close]; } }
查询:
#pragma mark -- 查询-(void)search{ if ([self.database open]) { FMResultSet *result = [self.database executeQuery:@"SELECT *FROM t_student"]; while ([result next]) { int ID = [result intForColumn:@"id"]; NSString *name = [result stringForColumn:@"name"]; int age = [result intForColumn:@"age" ]; NSLog(@"id = %d ,name = %@ ,age = %d",ID,name,age); } [self.database close]; } }
Appdelegate.m中
#import "AppDelegate.h"#import "FMDB.h"@interface AppDelegate ()@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //获取Document路径 NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]; //在此路径下新建一个文件 NSString *fliepath = [doc stringByAppendingPathComponent:@"student.sqlite"]; //创建一个数据库 _database = [FMDatabase databaseWithPath:fliepath]; //创建列表 if ([_database open]) { BOOL result = [_database executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);"]; if (result ) { NSLog(@"列表创建成功"); }else{ NSLog(@"列表创建失败"); } } // Override point for customization after application launch. return YES;}
viewController.m中
#import "ViewController.h"#import "FMDB.h"@interface ViewController ()@property(nonatomic,strong)FMDatabase *database;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; self.database = [FMDatabase databaseWithPath:[self getPath]]; if (![self.database open]) { return; } NSString *existsSql = [NSString stringWithFormat:@"select count(name) as countNum from sqlite_master where type = 'table' and name = '%@'",@"t_student"]; FMResultSet *resultSet = [self.database executeQuery:existsSql]; if ([resultSet next]) { NSInteger count = [resultSet intForColumn:@"countNum"]; NSLog(@"count = %ld",count); if (count == 1) { //增 [self insert]; // [self deleteAll]; //查 [self search]; } } // [self deleteAll];// //增// [self insert];// //删一个// [self deleteOne];// //改// [self change];// // //查// [self search]; // Do any additional setup after loading the view, typically from a nib.}#pragma mark -- 增 (插入数据)-(void)insert{ for (int i = 0; i < 1 ; i ++) { NSString *name = [NSString stringWithFormat:@"xiao-%d",i]; [self.database executeUpdate:@"INSERT INTO t_student (name, age) VALUES (?, ?);",name,@(arc4random()%40)]; } }#pragma mark -- 删除某一条数据-(void)deleteOne{ NSString *deleteOneSQL = [NSString stringWithFormat:@"delete from t_student where name = '%@'",@"xiao-0"]; [self.database executeUpdate:deleteOneSQL]; [self.database close]; }#pragma mark -- 删除所有的数据-(void)deleteAll{ [self.database executeUpdate:@"DROP TABLE IF EXISTS t_student;"]; }#pragma mark -- 修改数据-(void)change{ NSString *changeSQL = [NSString stringWithFormat:@"UPDATE t_student SET name = '%@' WHERE id = '%d'",@"xiao-9",2]; [self.database executeUpdate:changeSQL]; }#pragma mark -- 查询-(void)search{ FMResultSet *result = [self.database executeQuery:@"SELECT *FROM t_student"]; while ([result next]) { int ID = [result intForColumn:@"id"]; NSString *name = [result stringForColumn:@"name"]; int age = [result intForColumn:@"age" ]; NSLog(@"id = %d ,name = %@ ,age = %d",ID,name,age); } }#pragma mark -- 获取路径的方法-(NSString *)getPath{ //获取Document路径 NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]; //在此路径下拼接新建一个文件 NSString *fliepath = [doc stringByAppendingPathComponent:@"student.sqlite"]; return fliepath;}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}@end
1 0
- IOS开发~FMDB备忘
- IOS开发 FMDB
- IOS开发~FMDB备忘
- iOS开发 ----- FMDB使用
- iOS开发之FMDB
- iOS开发FMDB
- iOS开发-FMDB
- iOS开发数据库-FMDB
- iOS开发中使用FMDB
- iOS开发:FMDB的使用
- iOS开发实践之FMDB
- iOS开发~FMDB的使用
- 在iOS开发中使用FMDB
- 在iOS开发中使用FMDB
- 在iOS开发中使用FMDB
- 在ios开发中使用FMDB
- 在iOS开发中使用FMDB
- 在iOS开发中使用FMDB
- Debugging native framework code of Android Java applications
- java 泛型
- Mac环境下为Python安装MySQLdb库时遇到的诸多问题
- VS2012中创建Web服务并编译为dll的方法
- LeetCode 66. Plus One
- iOS开发FMDB
- Hadoop安装与配置
- 欢迎使用CSDN-markdown编辑器
- iOS网络状态监测之Reachability的使用
- Java源码解读——ArrayList
- Hibernate 缓存机制
- 使用ssh开发rest web服务支持http etag header的教程详解
- Linux写代码的夜间模式(保护眼睛),在Linux中安装f.lux
- Netty in Action (八) 第四章节 第一部分 传输服务迁移案例