数据库操作

iOS目前我们常用到的数据库有FMDBWCDBcocoaDataRealm,我常用到的是FMDB、和WCDB,现在闲暇时间做一下总结。

FMDB

model

主要介绍

FMDB是一个和iOS的SQLite数据库操作相关的第三方框架。主要把C语言操作数据库的代码用OC进行了封装。使用者只需调用该框架的API就能用来创建并连接数据库,创建表,查询等。

优点

1、轻量级,灵活。不消耗太多性能

2、FMDB将C语言的iOS系统的SQLite数据库的操作代码用OC进行封装,面向对象,容易理解和使用

3、提供了线程不安全的解决方案。

框架介绍

  1. FMDatabase,一个FMDatabase对象就代表一个单独的SQLite数据库,用来执行SQL语句
  2. FMResultSet 使用FMDatabase执行查询后的结果集
  3. FMDatabaseQueue 用于在多线程中执行多个查询或更新,它是线程安全的

实践

首先创建一个Model

model

首先我封装的demo中封装到单例中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//创建表是否成功
-(BOOL)openFMDBName:(NSString *)pathStr;
/**
* 增加
*/
-(BOOL)insetTitle:(id)model withPath:(NSString *)pathStr;
/**
* 删除 根据userid进行删除
*/
-(void)deleteWithTitle:(NSString *)pathStr withUserID:(NSString *)userId;
/**
* 删除所有数据
*/
-(void)deleteWithTitle:(NSString *)pathStr;
/**
* 更新数据 修改
*/
-(void)updateWithModel:(id)model;
/**
* 条件查询数据
*/
-(void)selectWithTitle:(NSString *)userId withUserID:(NSString *)pathStr;
/**
* 查询所有数据
*
*/
-(void)selectAllMethod:(NSString *)pathStr withBlock:(void(^)(id Success))block;
//查询数据(去除重复数据)
-(NSArray *)queryDataWithTableName:(NSString *)pathStr keyword:(NSString *)keyword;

添加数据的时候,将汉字转化为拼音,在根据sql语句中like进行查找,做到本地搜索,查询。

WCDB

WCDB是微信官方的移动端数据库组件,致力于提供一个高效、易用、完整的移动端存储方案。

优点

  1. 易用,WCDB支持一句代码即可将数据取出并组合为object。
  2. WINQ(WCDB语言集成查询):通过WINQ,开发者无须为了拼接SQL的字符串而写一大坨胶水代码。
  3. ORM(Object Relational Mapping):WCDB支持灵活、易用的ORM。开发者可以很便捷地定义表、索引、约束,并进行增删改查操作。
  4. 高效,WCDB通过框架层和sqlcipher源码优化,使其更高效的表现。
  5. 多线程高并发:WCDB支持多线程读与读、读与写并发执行,写与写串行执行。

框架介绍

WCDB提供了三个基础类进行数据库操作:WCTDatabase、WCTTable、WCTTransaction

  • WCTDatabase表示一个数据库,可以进行所有数据库操作,包括增删查改、表操作、事务、文件操作、损坏修复等。
  • 对于同一个路径的数据库,不同的WCTDatabase、WCTTable、WCTTransaction对象共享同一个WCDB核心。因此,你可以在代码的不同位置、不同线程任意创建不同的基础类对象,WCDB会自动管理它们的共享数据和线程并发

实践

  1. 首先和FMDB一样建立model,定义相应的字段,及索引属性,主键等

model

  1. 利用宏定义绑定到表的类将一个已有的OC类进行QRM绑定的过程(WCTTableCoding),需要绑定到表中的字段在这里声明,在.mm中去绑定

model

3.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//关闭数据库
+(void)killDB;
//添加数据
- (BOOL)insertUser:(WCDModel*)mod;
//更新所有的数据
- (BOOL)updateUser:(WCDModel*)mod;
//根据userid进行更新数据
- (BOOL)updateAgeAndUserIDWithMod:(WCDModel*)mod;
//通过model进行删除
- (BOOL)deleteUser:(WCDModel*)mod;
//删除所有
- (BOOL)deleteAllUsers;
//通过userid查询
- (WCDModel *)getUserWithId:(NSString*)userID;
//根据号查询
- (NSArray*)getUsersWithTelNum:(NSInteger)telNum;
//查询所有数据
- (NSArray*)getAllUser;

注意

  1. 在你的代码文件头引入头文件#import
  2. 由于WCDB是基于Objective-C++,因此需要将引用WCDB的源文件后缀.m改为.mm。

DatabaseManagerDemo地址