封装一些数据库SQLCipher的方法(增、删、改、查)
2015-11-16 17:11
399 查看
上一篇随笔只是简单的说了一下使用SQLCipher框架,介绍的比较笼统,可能看一遍之后更加蒙圈了,为了更好的使用这个数据库,整理了我在公司项目的需要用的方法,包括创建表,插入数据,更新数据,搜索查询数据等。可以从GitHub下载了: https://github.com/dongjiawang/JWSqliteBase
说多了都是麻烦,不如直接上代码,在注释中已经写好,注意:请结合上一篇《使用SQLCipher加密数据库》一起使用
下面是根据需要创建表,举个例子:创建一个用户表,表中有用户名,密码,手机型号,头像等
上面就是创建了一个用户表,如果在以后的迭代中需要添加字段,就可以在SQLiteBase这个类的打开是数据库的时候添加。
先判断数据库版本号是否更新,然后调用添加字段函数,代码举例:在用户学习详情的表中增加一个学习的时长:"playTime"
因为涉及到的使用方法很多就不再一一举例;就把头文件定义的方法展示出来,可以根据需要调用
在使用过程中会涉及到调用用户名,数据库密码等,可以做一个全局的变量来进行使用,在以后使用过程中肯定会发现许多问题,今天只是把简单的功能做出来,以后慢慢增加。
现在有一个问题是关于表结构的信息记录在一个plist文件中,其实还是会被他人看到数据库的结构,正在考虑把info使用coredata储存起来,再增加一个方法,当表结构有变化的时候自动更新信息。
说多了都是麻烦,不如直接上代码,在注释中已经写好,注意:请结合上一篇《使用SQLCipher加密数据库》一起使用
下面是根据需要创建表,举个例子:创建一个用户表,表中有用户名,密码,手机型号,头像等
//生成一个用户表对象 LocalDataBase *userTb = [LocalDataBase GetTableWithType:@"user" HasUser:NO]; if (![LocalDataBase isExistTable:@"user"]) { //先创建表 [userTb CreateTableWithKeys:[NSArray arrayWithObjects:@"userid", nil] OtherNeeds:[NSArray arrayWithObjects:@"siteid",@"username",@"password",@"mobilePhone",@"name",@"department",@"image",@"lastLoginTime", nil] Data:nil]; }
上面就是创建了一个用户表,如果在以后的迭代中需要添加字段,就可以在SQLiteBase这个类的打开是数据库的时候添加。
先判断数据库版本号是否更新,然后调用添加字段函数,代码举例:在用户学习详情的表中增加一个学习的时长:"playTime"
NSUserDefaults *dbDefault = [NSUserDefaults standardUserDefaults]; int db_version = [[dbDefault objectForKey:@"dbVersion"] intValue]; if (MyDB_Version > db_version || db_version == 0) { [LocalDataBase AddColumnToTable:@"user_icr_rco" FieldName:@"playTime" FieldType:@"VARCHAR(4000)"]; }
因为涉及到的使用方法很多就不再一一举例;就把头文件定义的方法展示出来,可以根据需要调用
// // SQLiteBase.h // mySqlite // // Created by henry on 15/11/16. // Copyright © 2015年 dongjiawang. All rights reserved. // #import <Foundation/Foundation.h> #import <sqlite3.h> @interface SQLiteBase : NSObject //数据库密码 @property (nonatomic, strong) NSString *DB_PassWord; @property (nonatomic) sqlite3 *sql_base; //是否打开了数据库 @property (nonatomic, assign) BOOL DB_Open; //具体的数据表名 @property (nonatomic, strong) NSString *myTableName; //表记录,记录表的信息 @property (nonatomic, strong) NSMutableArray *myTableInfo; @property (nonatomic, assign) BOOL hasUser; //是否存在这个表 +(BOOL) isExistTable:(NSString *)tableName; //根据一个表类型,生成一个表对象,是否需要用户名 +(id)GetTableDBWithTableName:(NSString *)tableName hasUser:(BOOL)has; //给一个已知的表添加字段 +(BOOL)addColumToTable:(NSString *)tableName FileName:(NSString *)file FileType:(NSString *)fileType; #pragma mark 私有方法 #pragma mark - //根据参数创建表,keys是主键,needs是非主键,非主键是必要的,假如需要排序、搜索等功能,data是数据 -(BOOL)CreateTableWithKeys:(NSArray *)keys OtherNeeds:(NSArray *)needs Data:(NSString *)data; //向表中插入数据,一个dict是一条记录,如果存在记录,是否覆盖 -(BOOL)InsertDataWithDict:(NSDictionary *)dict Replace:(BOOL)replace; //更新表字段,key是需要更新的字段名称,newValue是更新后的值,where是条件(sql语句),condition是满足更新的条件,use是否使用用户名为条件 -(BOOL)UpdateRecordWithKey:(NSString *)key Value:(NSString *)newValue Where:(NSString *)where Condition:(NSString *)condition UseUser:(BOOL)use; //获取表中的前N项数据,begin是开始行号,Rows是返回多少行,key是按照哪个字段排序,样式为nil或者『key1 desc 』,key与values的个数必须相等,use是否使用用户名作为条件,,为了匹配模糊查询,此处的values前面必须加上=,like等关键字 -(NSMutableArray *)GetRowsWithBegin:(NSUInteger)begin Rows:(NSUInteger)rows OrderBy:(NSString *)key Keys:(NSArray *)keys Values:(NSArray *)values UseUser:(BOOL)use; //从数据库中拿到所有数据,用户名为条件 -(NSMutableArray *)GetAllRecordsUseUser:(BOOL)use; //从数据库中获取某个key的所有数据,用户名为条件 -(NSMutableArray *)GetAllRecordsWithKeys:(NSArray *)keys Values:(NSArray *)values UseUser:(BOOL)use; //根据关键字和关键字的值得到一条数据记录,如果不存在返回nil,也可以用来判断是否存在某条记录,keys与values的个数必须相等,use是否使用用户名为条件 -(NSMutableArray *)GetOneRecordWithKeys:(NSArray *)keys Values:(NSArray *)values UseUser:(BOOL)use; //删除所有数据,使用用户名为条件 -(BOOL)DeleteAllRecordsUseUser:(BOOL)use; //删除单条数据,keys是对应关键字,values关键字的值,是否使用用户名为条件 -(BOOL)DeleteOneRecordWithKeys:(NSArray *)keys Values:(NSArray *)values UseUser:(BOOL)use; //根据SQL语句得到值 -(NSMutableArray *)GetRecordsWithSql:(NSString *)sql; #pragma mark 类公共方法 #pragma mark - //创建数据库 +(void)CreateDB; //打开数据库 +(BOOL)OpenDB; //关闭数据库 +(BOOL)closeDB; //使用sql语句创建表 +(BOOL)CreateTableWithSql:(NSString *)sql; //使用sql语句删除表 +(BOOL)DeleteTableWithSql:(NSString *)sql; //使用sql语句更新表 +(BOOL)UpdateTableWithSql:(NSString *)sql; //使用sql判断是否存在表 +(BOOL)isExistTableWithSql:(NSString *)sql; //使用sql语句查询需要的数据 +(NSMutableArray *)GetNeedRecordWithSql:(NSString *)sql; @end
在使用过程中会涉及到调用用户名,数据库密码等,可以做一个全局的变量来进行使用,在以后使用过程中肯定会发现许多问题,今天只是把简单的功能做出来,以后慢慢增加。
现在有一个问题是关于表结构的信息记录在一个plist文件中,其实还是会被他人看到数据库的结构,正在考虑把info使用coredata储存起来,再增加一个方法,当表结构有变化的时候自动更新信息。
相关文章推荐
- redis 清空缓存
- mysql忘记root密码拯救方法(flush privileges)
- Redis学习笔记(一)
- SQL.Orcale中的to_date()/to_char()/to_number()的用法
- MySQL主从复制(维护)
- Redis-cluster集群【第二篇】:redis持久化
- MongoDB的选举过程
- sql优化
- SQL Case when 的使用方法
- SQL入门语句
- 使用dbisql工具连接IQ Server的方法和注意事项
- Java调用Oracle存储过程过程中几个问题
- MySQL索引原理及慢查询优化
- mysql保障数据一致性:锁与解(一)
- 事务并发、事务隔离级别
- 定时检测Memcached进程是否存在,若不存在自动启动它
- mysql 查看版本的四种方法
- oracle入门心得
- .net MongoDb驱动的封装
- ORACLE 字符转义的问题