IOS开发-封装数据库sqlite3之为何选择FMDB
为什么使用第三方轻量级框架FMDB?
FMDB是用于进行数据存储的第三方的框架,它与SQLite与Core Data相比较,存在很多优势。
FMDB是面向对象的,它以OC的方式封装了SQLite的C语言API,使用起来更加的方便,不需要过多的关心数据库操作的知识。
为什么不使用core data和SQLite?
Core Data是ORM的一种体现,实现了界面化操作。使用Core Data需要用到模型数据的转化,虽然操作简单,不需要直接操作数据库,但是性能没有直接使用SQLite高。但是SQLite使用的时候需要使用c语言中的函数,操作麻烦,因此需要对它进行封装。但是如果只是简单地封装,很可能会忽略很多重要的细节,比如如何处理并发以及安全性更问题。
下面简单封装sqlite来理解FMDB为什么那么好用呢?
新建SqleiteManage类实现封装:
#import "SqleiteManage.h"
static SqleiteManage *manage = nil;
@implementation SqleiteManage //单例保证是同一个数据库
+(instancetype)shareManage{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
manage = [[SqleiteManage alloc]init]; }); return manage;
} //打开数据库
-(int)openDB:(NSString *)str{
//1.打开数据库 建表
NSString *dbpath =[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]stringByAppendingPathComponent:str];
NSLog(@"%@",dbpath); //打开数据库
result = sqlite3_open([dbpath UTF8String], &db);
if (SQLITE_OK ==result) {
NSLog(@"打开成功");
}else{
NSLog(@"打开失败");
} return result; } //关闭数据库
-(int)closeDB{
return sqlite3_close(db);
}
//------建表
-(BOOL)creatTableWithSqlite:(NSString *)sql{ if (result ==SQLITE_OK) { // 建表的SQL语句
// primary key autoincrement 定义 id为主键 值是自动增长的
// not null unique 不能为空 不能重复
// 建表的公式
// create table 表名 (字段名 字段的数据类型,字段名 字段的数据类型........);
// NSString *sql =@"create table if not exists user (id integer primary key autoincrement, name text not null unique, phone text, creatDate text);";
char *error;
int resul = sqlite3_exec(db, [sql UTF8String], NULL, NULL, &error);
[self closeDB];
if (resul == SQLITE_OK) { NSLog(@"建表成功");
return YES;
// return 跳出整个函数
// black 是跳出括号 }else{
NSLog(@"%s",error);
return NO;
} }
return NO;
} //插入
-(BOOL)insertMessageWithSql:(NSString *)sql{
if (result == SQLITE_OK) {
char *error;
int resul = sqlite3_exec(db, [sql UTF8String], NULL, NULL, &error);
[self closeDB];
if (resul == SQLITE_OK) {
return YES;
}else{
return NO;
} } return NO; } //删除
-(BOOL)deleteMessageWithSql:(NSString *)sql{
if (result == SQLITE_OK) {
char *error;
int resul = sqlite3_exec(db, [sql UTF8String], NULL, NULL, &error);
[self closeDB];
if (resul == SQLITE_OK) {
return YES;
}else{
return NO;
} }
return NO;
} //修改
-(BOOL)modifyMessageWithSql:(NSString *)sql{
if (result == SQLITE_OK) {
char *error;
int resul = sqlite3_exec(db, [sql UTF8String], NULL, NULL, &error);
[self closeDB];
if (resul == SQLITE_OK) {
return YES;
}else{
return NO;
} } return NO;
} -(NSArray*)queryMessageWithSQL:(NSString *)sql andObject:(NSString *)obj{
if (result==SQLITE_OK) {
// 声明一个结果集 查询的结果存放在结果集里面
sqlite3_stmt *stmt;
// 校验SQL语句是否正确 int nByte 为-1的时候 不限制 查询的长度
if (sqlite3_prepare_v2(db, [sql UTF8String], -, &stmt, NULL)==SQLITE_OK) {
// like 模糊查询 NSString *searchContent =[NSString stringWithFormat:@"%%%@%%",obj];
// 绑定要查询的内容
if ( sqlite3_bind_text(stmt, , [searchContent UTF8String], -, NULL)==SQLITE_OK
) {
NSMutableArray * resultlist = [NSMutableArray array];
// 循环 查询
while ( sqlite3_step(stmt)== SQLITE_ROW) {
// 把查询到的一条数据 整合到一个字典里面 // 1 是 icol 查询到的这一条数据的列数
char *name =(char *) sqlite3_column_text(stmt, );
char *phone = (char *) sqlite3_column_text(stmt, );
char *time =(char *) sqlite3_column_text(stmt, );
NSDictionary *info =@{@"name":[NSString stringWithUTF8String:name],@"phone":[NSString stringWithUTF8String:phone],@"time":[NSString stringWithUTF8String:time],};
[resultlist addObject:info];
}
[self closeDB];
return resultlist; }
} }
return nil;
}
@end
封装后使用:
#import "ViewController.h"
#import "SqleiteManage.h"
@interface ViewController () //数据库(Database):按照数据结构来组织、存储和管理数据
//数据库基本是由表,关系,操作构成
//在移动平台开发常用的是SQLite
//以表(table)为单位
//表头的每一列 都是一个字段(clumn,属性)
//可以通过字段查找到对应的数据
//ios 使用C语言操作数据库
//***** 使用数据库之前的先添加;ibsqlite3框架#import<> @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
//************数据库相关概念***************
/*
ios使用数据库的重要方法
打开数据库:sqlite3_open()
建表 修改 添加 更新 删除数据:sqlite3_exec()
查询:1.效验语句是否合法:sqlite3_prepare_v2
2.绑定要查询的数据和sql语句:sqlite3_bind_text
3.循环查找内容(根据行):sqlite3_step
4.取出这一行里面的数据(根据对应的类型):sqlite3_column_text
关闭数据库:sqlite3_close() SQL(Strured Query Language)是一种结构查询语言
SQL 语言特点:每一句后面都有一个;号结束 不区分大小写
SQL 的关键字:create update delete from where by table 。。。
在数据库里面不可以使用关键字来命名表名 或字段
数据库中的字符串 要用单引号 '' 括起来
sqlite 是关系型数据库 SQL语句使用公式
1.建表
@" create table (字段名 字段类型,字段名,字段类型);"
2.create table if not exists 表名(字段名,字段类型,)
如 :@"create table if not exists user(id integer,name text,phone text)
插入:insert into 表名(字段,字段)vlaus('内容','内容')
删除:delete from 表名 where 字段= '要删除的内容' 修改数据 :update 表名 set 字段 = '修改后的内容' where 字段 = '修改前的内容';
查询:
(1)select *from 表名 查询所有的字段(*表示所有);
(2)sele 字段1,字段2,......from 表名; 数据库的使用公式:
导入框架
1.创建数据库 打开数据库
2.创建表
3.添加 删除 修改 查询 内容 关闭数据库
//***********************************************************
*/
SqleiteManage * manage =[SqleiteManage shareManage];
// 打开数据库
[manage openDB:@"shujuku..sqlite"]; BOOL seccess = [manage creatTableWithSqlite: @"create table if not exists user (id integer primary key autoincrement, name text not null unique, phone text, creatDate text);"];
if (seccess) {
NSLog(@"建表成功");
}
// 插入数据公式
// insert into 表名 (字段,字段,字段) values ('','','');
NSString *name = @"小啊";
NSString * tel = @"";
NSString * date = @"2088-12-25"; // 插入数据
NSString *sql = [NSString stringWithFormat:@"insert into user (name, phone,creatDate) values ('%@','%@','%@');", name,tel,date ];
if ([manage insertMessageWithSql:sql]==YES) {
NSLog(@"插入数据成功");
} // 删除数据
if ([manage deleteMessageWithSql:@"delete from user where name= '小明';"]==YES) {
NSLog(@"删除数据成功");
}
if ([manage modifyMessageWithSql:@"update user set name = '大黄人' where name = '白马王子';"]==YES) {
NSLog(@"修改数据成功");
}
// 查询数据
NSArray * list = [manage queryMessageWithSQL:@"select id,name,phone,creatDate from user where name like ?;" andObject:@"小"];
if (list.count !=) {
NSLog(@"%@",list);
}
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} @end
封装后sqlite,减少了很多代码,所有使用FMDB会非常好用。而且处理了多线程并发的问题。FMDB封装也是这样。
IOS开发-封装数据库sqlite3之为何选择FMDB的更多相关文章
- IOS开发——使用数据库
IOS开发——使用FMDB数据库 简介 需求作用: 如果需要保存大量的结构较为复杂的数据的时候,使用数据库,例如交规考试项目 1.数据库的基本介绍 数据库(DB)是一种数据模型组织起来并存放存储管理的 ...
- iOS开发-Realm数据库
Realm Realm-Object-c,见:https://realm.io/cn/docs/objc/latest/Realm官网:https://realm.io 使用流程 导入头文件#impo ...
- iphone/iOS 访问本地数据库sqlite3
Phone也支持访问本地数据库Sqlite 3.这里简单的介绍一下iPhone上Sqlite 3的使用方法. 首先需要在项目中引用Sqlite 3的开发包,下面是在iPhone SDK 3.0下的目录 ...
- ios开发——实用技术篇Swift篇&照片选择
照片选择 // MARK: - 选择照片 /*----- 选择照片 ------*/ @IBAction func addImageButtonClick() { let actionSheet = ...
- IOS学习笔记28—SQLite3第三方库之FMDB
本文转载至 http://blog.csdn.net/happyrabbit456/article/details/11609451 SQLite是一种小型的轻量级的关系型数据库,在移动设备上使用是非 ...
- iOS开发使用半透明模糊效果方法整理
虽然iOS很早就支持使用模糊效果对图片等进行处理,但尤其在iOS7以后,半透明模糊效果得到大范围广泛使用.包括今年最新发布的iOS8也沿袭了这一设计,甚至在OS X 10.10版Yosemite中也开 ...
- [转]iOS开发使用半透明模糊效果方法整理
转自:http://www.molotang.com/articles/1921.html 虽然iOS很早就支持使用模糊效果对图片等进行处理,但尤其在iOS7以后,半透明模糊效果得到大范围广泛使用.包 ...
- iOS开发中的4种数据持久化方式【二、数据库 SQLite3、Core Data 的运用】
在上文,我们介绍了ios开发中的其中2种数据持久化方式:属性列表.归档解档.本节将继续介绍另外2种iOS持久化数据的方法:数据库 SQLite3.Core Data 的运 ...
- iOS开发数据库篇—SQLite简单介绍
iOS开发数据库篇—SQLite简单介绍 一.离线缓存 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等. 说明:离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式 (1 ...
随机推荐
- jsp项目与mysql链接
因为毕设是地下车库管理系统,所以打算学习jsp进行开发~ 今天主要是[新建网站项目+mysql链接],在此篇之前所做的工作:tomcat服务器配置,mysql数据库的安装与启用(在之后的开发中可以使用 ...
- 在 Ubuntu 14.04 中配置 PXE 服务器
PXE(预启动执行环境Preboot Execution Environment)服务器允许用户从网络中启动 Linux 发行版并且可以不需要 Linux ISO 镜像就能同时在数百台 PC 中安装. ...
- qsort函数
qsort函数用法举例 #include <stdio.h> #include <stdlib.h> #include <string.h> //数字比较函数 in ...
- 在 Apache error_log 中看到多个信息,提示 RSA server certificate CommonName (CN) 与服务器名不匹配(转)
在 Apache error_log 中看到多个信息,提示 RSA server certificate CommonName (CN) 与服务器名不匹配. Article ID: 1500, cre ...
- 使用PYTHON实现docx文档的读写
经常写文章的小白们会遇到这样的问题,知道想表达的意思,想出了大概描述的词汇,但就是缺乏完整漂亮的句子,也许曾经在某个地方看到过,但是找不到了.另外一种情况,阅读了大量的报告,用的时候想到了其中的某个结 ...
- Oracle数据库中scott用户不存在的解决方法
SCOTT用户是我们学习Oracle过程中一个非常重要的实验对象,在我们建立数据库的时候,如果是选择定制模式的话,SCOTT用户是不会默认出现的,不过我们可以通过使用几个简单命令来使这个用户出现.以下 ...
- OVM-V1.2 版发布,新增实时监控、支持一键升级
OVM是国内首款.完全免费.企业级--混合虚拟化管理平台,OVM是从中小企业目前的困境得到启发,完全基于国内企业特点开发,更多的关注国内中小企业用户的产品需求. OVM-V1.2 该版本功能变动如下: ...
- easyui js基础
$(document).ready( function(){ initload(); });function initConfig(){ //数据列表 yzfymx=$("#tjdj&quo ...
- AngularJS从构建项目开始
AngularJS从构建项目开始 AngularJS体验式编程系列文章,将介绍如何用angularjs构建一个强大的web前端系统.angularjs是由Google团队开发的一款非常优秀web前端框 ...
- iOS-硬件声音 ,振动,提示警告
为了引起用户注意发出警告的时候,常常伴随有提示音震动等.系统声音服务提供了一个接口,用于播放不超过30秒的声音文件,他支持的格式有CAF,AIF,WAV. iOS使用该API支持3种不同的通知: 声音 ...