上一篇随笔只是简单的说了一下使用SQLCipher框架,介绍的比较笼统,可能看一遍之后更加蒙圈了,为了更好的使用这个数据库,整理了我在公司项目的需要用的方法,包括创建表,插入数据,更新数据,搜索查询数据等。可以从GitHub下载了: https://github.com/dongjiawang/JWSqliteBase

  说多了都是麻烦,不如直接上代码,在注释中已经写好,注意:请结合上一篇《使用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 == )
{
[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储存起来,再增加一个方法,当表结构有变化的时候自动更新信息。

封装一些数据库SQLCipher的方法(增、删、改、查)的更多相关文章

  1. 简单的php数据库操作类代码(增,删,改,查)

    这几天准备重新学习,梳理一下知识体系,同时按照功能模块划分做一些东西.所以.mysql的操作成为第一个要点.我写了一个简单的mysql操作类,实现数据的简单的增删改查功能. 数据库操纵基本流程为: 1 ...

  2. 好用的SQL TVP~~独家赠送[增-删-改-查]的例子

    以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化.  本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...

  3. iOS FMDB的使用(增,删,改,查,sqlite存取图片)

    iOS FMDB的使用(增,删,改,查,sqlite存取图片) 在上一篇博客我对sqlite的基本使用进行了详细介绍... 但是在实际开发中原生使用的频率是很少的... 这篇博客我将会较全面的介绍FM ...

  4. iOS sqlite3 的基本使用(增 删 改 查)

    iOS sqlite3 的基本使用(增 删 改 查) 这篇博客不会讲述太多sql语言,目的重在实现sqlite3的一些基本操作. 例:增 删 改 查 如果想了解更多的sql语言可以利用强大的互联网. ...

  5. django ajax增 删 改 查

    具于django ajax实现增 删 改 查功能 代码示例: 代码: urls.py from django.conf.urls import url from django.contrib impo ...

  6. ADO.NET 增 删 改 查

    ADO.NET:(数据访问技术)就是将C#和MSSQL连接起来的一个纽带 可以通过ADO.NET将内存中的临时数据写入到数据库中 也可以将数据库中的数据提取到内存中供程序调用 ADO.NET所有数据访 ...

  7. MVC EF 增 删 改 查

    using System;using System.Collections.Generic;using System.Linq;using System.Web;//using System.Data ...

  8. python基础中的四大天王-增-删-改-查

    列表-list-[] 输入内存储存容器 发生改变通常直接变化,让我们看看下面列子 增---默认在最后添加 #append()--括号中可以是数字,可以是字符串,可以是元祖,可以是集合,可以是字典 #l ...

  9. day 37-8 关于mysql 的增 删 改 查 及联合列表

    1      VARCHAR : 字符串的意思 (括号内的数字代表尾数) 输入的字符串在这个范围内都行 CHAR  :字符串的意思(区别就有几位数字 必须写几位) INT   整数(位数) 输入的数字 ...

随机推荐

  1. 1215.1——动态分配内存的补充realloc

    当再次在原来申请的内存基础上再加内存的时候用realloc,如果第一次分配的内存后面存储地方够用,则连着原来的申请,如果不够用,就重新找到一块够用的地方,然后把原来的复制过去 int main(int ...

  2. 软件测试作业三 尝试使用JUnit

    写一个判断三角形种类的代码,对其进行测试. 判断三角形代码: package 测试1; public class sjx { public String f(int a,int b,int c) { ...

  3. AC自动机(模板)

    #include <cstdio> #include <cstring> #include <iostream> #include <cstdlib> ...

  4. Gengxin讲STL系列——Queue和Stack

    第三篇. 感觉队列和栈是必须的……所以决定加上这两个…… 我发现我已经买域名买上隐了……今天又买了个.top……真是智障…… Queue(队列FIFO)和Statk(栈LIFO). 那么为什么要这两个 ...

  5. CDZSC_2015寒假新人(2)——数学 P

    P - P Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status ...

  6. vim常用指令一览

    插入指令 i 在光标处插入字符 I 在光标所在行最前插入 a 在光标所在字符后面插入 A 在光标所在行的最后插入 o 在光表所在行下面插入一行 O 在光标所在行上面插入一行 r 替换光标所在字符,只替 ...

  7. YUI之数组操作

    YUI的构建数组,将类数组转换成真正的数组,从而可以使用数组的所有方法   数组构建 //真正的数组返回1,类数组返回2,其余的返回0 YArray.test = function (obj) { v ...

  8. PHP __autoload函数知识点

    __autoload函数主要是用来包含不存在的类文件,当初始化的类不存在的时候 存在一个文件名为footer.php的文件,里面有个footer类 class footer{ public funct ...

  9. C# 加密可逆

    现在一直在做一个小软件,公司的通讯录系统,也没什么功能增删改查,这算是我来这个公司实习的第一件事吧. 在修改个人信息的时候一直对于密码显示这个存在矛盾,不知道应该是要哪种形式去做,后来自己就先用md5 ...

  10. Windows7上FTP服务器建立

    1. FTP服务器建立 注意:千万不能使用FTP和ftp建立用户,否则无法登陆ftp服务器. 1.1本地机器上创建一个用户 这个用户是用来登录到FTP的.我的电脑右键->管理->本地用户和 ...