时间:2021-07-01 10:21:17 帮助过:2人阅读
上面就是创建了一个用户表,如果在以后的迭代中需要添加字段,就可以在SQLiteBase这个类的打开是数据库的时候添加。
先判断数据库版本号是否更新,然后调用添加字段函数,代码举例:在用户学习详情的表中增加一个学习的时长:"playTime"
1 NSUserDefaults *dbDefault = [NSUserDefaults standardUserDefaults]; 2 3 int db_version = [[dbDefault objectForKey:@"dbVersion"] intValue]; 4 if (MyDB_Version > db_version || db_version == 0) 5 { 6 [LocalDataBase AddColumnToTable:@"user_icr_rco" FieldName:@"playTime" FieldType:@"VARCHAR(4000)"]; 7 }
因为涉及到的使用方法很多就不再一一举例;就把头文件定义的方法展示出来,可以根据需要调用
1 // 2 // SQLiteBase.h 3 // mySqlite 4 // 5 // Created by henry on 15/11/16. 6 // Copyright © 2015年 dongjiawang. All rights reserved. 7 // 8 9 #import <Foundation/Foundation.h> 10 #import <sqlite3.h> 11 12 @interface SQLiteBase : NSObject 13 //数据库密码 14 @property (nonatomic, strong) NSString *DB_PassWord; 15 @property (nonatomic) sqlite3 *sql_base; 16 //是否打开了数据库 17 @property (nonatomic, assign) BOOL DB_Open; 18 //具体的数据表名 19 @property (nonatomic, strong) NSString *myTableName; 20 //表记录,记录表的信息 21 @property (nonatomic, strong) NSMutableArray *myTableInfo; 22 @property (nonatomic, assign) BOOL hasUser; 23 //是否存在这个表 24 +(BOOL) isExistTable:(NSString *)tableName; 25 26 //根据一个表类型,生成一个表对象,是否需要用户名 27 +(id)GetTableDBWithTableName:(NSString *)tableName hasUser:(BOOL)has; 28 //给一个已知的表添加字段 29 +(BOOL)addColumToTable:(NSString *)tableName FileName:(NSString *)file FileType:(NSString *)fileType; 30 31 #pragma mark 私有方法 32 #pragma mark - 33 //根据参数创建表,keys是主键,needs是非主键,非主键是必要的,假如需要排序、搜索等功能,data是数据 34 -(BOOL)CreateTableWithKeys:(NSArray *)keys OtherNeeds:(NSArray *)needs Data:(NSString *)data; 35 36 //向表中插入数据,一个dict是一条记录,如果存在记录,是否覆盖 37 -(BOOL)InsertDataWithDict:(NSDictionary *)dict Replace:(BOOL)replace; 38 39 //更新表字段,key是需要更新的字段名称,newValue是更新后的值,where是条件(sql语句),condition是满足更新的条件,use是否使用用户名为条件 40 -(BOOL)UpdateRecordWithKey:(NSString *)key Value:(NSString *)newValue Where:(NSString *)where Condition:(NSString *)condition UseUser:(BOOL)use; 41 42 //获取表中的前N项数据,begin是开始行号,Rows是返回多少行,key是按照哪个字段排序,样式为nil或者『key1 desc 』,key与values的个数必须相等,use是否使用用户名作为条件,,为了匹配模糊查询,此处的values前面必须加上=,like等关键字 43 -(NSMutableArray *)GetRowsWithBegin:(NSUInteger)begin Rows:(NSUInteger)rows OrderBy:(NSString *)key Keys:(NSArray *)keys Values:(NSArray *)values UseUser:(BOOL)use; 44 45 //从数据库中拿到所有数据,用户名为条件 46 -(NSMutableArray *)GetAllRecordsUseUser:(BOOL)use; 47 48 //从数据库中获取某个key的所有数据,用户名为条件 49 -(NSMutableArray *)GetAllRecordsWithKeys:(NSArray *)keys Values:(NSArray *)values UseUser:(BOOL)use; 50 51 //根据关键字和关键字的值得到一条数据记录,如果不存在返回nil,也可以用来判断是否存在某条记录,keys与values的个数必须相等,use是否使用用户名为条件 52 -(NSMutableArray *)GetOneRecordWithKeys:(NSArray *)keys Values:(NSArray *)values UseUser:(BOOL)use; 53 54 //删除所有数据,使用用户名为条件 55 -(BOOL)DeleteAllRecordsUseUser:(BOOL)use; 56 57 //删除单条数据,keys是对应关键字,values关键字的值,是否使用用户名为条件 58 -(BOOL)DeleteOneRecordWithKeys:(NSArray *)keys Values:(NSArray *)values UseUser:(BOOL)use; 59 60 //根据SQL语句得到值 61 -(NSMutableArray *)GetRecordsWithSql:(NSString *)sql; 62 63 #pragma mark 类公共方法 64 #pragma mark - 65 //创建数据库 66 +(void)CreateDB; 67 68 //打开数据库 69 +(BOOL)OpenDB; 70 71 //关闭数据库 72 +(BOOL)closeDB; 73 74 //使用sql语句创建表 75 +(BOOL)CreateTableWithSql:(NSString *)sql; 76 77 //使用sql语句删除表 78 +(BOOL)DeleteTableWithSql:(NSString *)sql; 79 80 //使用sql语句更新表 81 +(BOOL)UpdateTableWithSql:(NSString *)sql; 82 83 //使用sql判断是否存在表 84 +(BOOL)isExistTableWithSql:(NSString *)sql; 85 86 //使用sql语句查询需要的数据 87 +(NSMutableArray *)GetNeedRecordWithSql:(NSString *)sql; 88 89 @end
在使用过程中会涉及到调用用户名,数据库密码等,可以做一个全局的变量来进行使用,在以后使用过程中肯定会发现许多问题,今天只是把简单的功能做出来,以后慢慢增加。
现在有一个问题是关于表结构的信息记录在一个plist文件中,其实还是会被他人看到数据库的结构,正在考虑把info使用coredata储存起来,再增加一个方法,当表结构有变化的时候自动更新信息。
封装一些数据库SQLCipher的方法(增、删、改、查)
标签: