最近几天整了下Sqlite3,也就是iOS的另外一种储存方式,那么coreData是有什么不足么,不是,一般数据比较简易的时候是不会用coreData的,反而会用自身的sqlte3来实现本地的存储,这就需要用到了点SQL语句了,一般都会用第三方FMDB(第三方库)来简化使用,但第三方的应用是下一次博客的事情了,这次用自带的sqlite3来实现一个简易的通讯录,能够实现保存,并完成增删改查即可,毕竟是最基础的嘛,用第三方虽然简单,但是底层的基础还是要回的。首先看一下如何导入自身的sqlite3的库吧
如果细看这个图,那么也就知道,这个demo是按照MVC模式写的,既然是MVC模式写的,那么必然就会出现Model(模型类),View(视图类)以及Controller(控制器类)
这次的页面没有进行细作,只是为了能够了解Sqlite3的用法,首先就是模型类,看看数据库结构
上面是一个第三方工具,虽然能够快速建立表,但是作为程序员,不建议用它直接建表,建议用sql语句,毕竟还能回顾以及锻炼自己的SQL语句嘛,岂不是一举两得,一般工具是用来查看数据库的。
这里的布局非常简单,只是为了介绍sqlite3的用法,如果想要比较好的视觉可以去之前的博客iOS学习-------简单通讯录(UITableView和CoreData的应用),其他的都是一样的,只是存储的方法变了而已
Model(模型)
//
// Humen.h
// Sqilte3
//
// Created by YueWen on 15/10/6.
// Copyright (c) 2015年 YueWen. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Humen : NSObject
@property(nonatomic,strong)NSString * name;//姓名
@property(nonatomic,assign)NSInteger age;//年龄
@property(nonatomic,strong)NSString * tele;//电话
@property(nonatomic,strong)NSString * address;//地址
@property(nonatomic,assign)NSInteger humenId;//id
/**
* 便利初始化方法
*
* @param name 初始name
* @param age 初始age
* @param tele 初始tele
* @param address 初始地址
*
* @return 初始化好的Humen对象
*/
-(instancetype)initWithName:(NSString *)name Age:(NSInteger)age Tele:(NSString *)tele Address:(NSString *)address;
实现便利初始化方法
-(instancetype)initWithName:(NSString *)name Age:(NSInteger)age Tele:(NSString *)tele Address:(NSString *)address
{
if (self = [super init])
{
self.name = name;//初始化name
self.age = age;//初始化age
self.tele = tele;//初始化tele
self.address = address;//初始化address
}
return self;
}
/**
* 增加人
*
* @param humen 需要增加的Humen模型
*/
-(void)addHumenToSqlite:(Humen *)humen;
/**
* 更新数据
*
* @param humen 需要更新的Humen模型
*/
-(void)updateHumenFromSqlite:(Humen *)humen withIndex:(NSInteger)index;
/**
* 根据下标即id删除
*
* @param index 当前的id
*/
-(void)deleteHumenFromSqlite:(NSInteger)index;
/**
* 根据姓名查询名字
*
* @param name 查询的名字
*/
-(void)selectHumenFromWithName:(NSString *)name;
其次,Manager一般都是单例,这次也不例外
/**
* 单例方法
*
* @return 返回单例
*/
+(instancetype)shareSqlite3Manager;
此外,还应该有一个方法能够加载所有的数据,即刷新类似功能的时候,从新从数据库中加载一般数据
/**
* 加载数据库中所有的数据
*/
-(void)loadMHumen;
如果外界想获得所有的数据,那么必然会有一个对外开放的属性,但是外界是不能更改的,所以是readOnly的属性
/**
* 存储数据库中的数据数组
*/
@property(nonatomic,strong,readonly)NSArray * humen;
然后是最麻烦的实现方法,先从最简单的东西开始,不要忘记导入自带的sqlite3的头文件
#import <sqlite3.h>
延展中的属性,其中之一必须有导入sqlite3的对象,第二个就是可变数组,用来存储处理好的对象,也就是存储将字典处理好Humen对象,延展如下
@interface Sqlite3Manager ()
@property(nonatomic)sqlite3 * humendate;//不要加strong
@property(nonatomic,strong)NSMutableArray * mHumen;
@end
接着实现重写init方法,以及单例方法,这个相信是再熟悉也不过了
- (instancetype)init
{
self = [super init];
if (self) {