UI进阶之数据管理及SQL语句


创建DataBaseHandle继承NSObject

在DataBaseHandle.h中编写方法

+ (DataBaseHandle *)sharedDataBaswHandle;

//打开数据库

- (void)openDB;


//关闭数据库;

- (void)closeDB;


//创建表

- (void)createTable;


//插入一条数据

- (void)insertName:(NSString *)name

gender:(NSString *)gender

age:(NSInteger)age;


//通过UID更新一个数据

-(void)updataWithUID:(NSInteger )uid;


//通过UID删除一个数据

-(void)deleteWithUID:(NSInteger)uid;


//搜索全部

-(void)searchAll;


//根据name查询一条数据

-(void)seaechWithName:(NSString *)name;


在DataBaseHandle.m中


@interface DataBaseHandle()

//sqlite的头文件#import@interface DataBaseHandle()

//documents文件夹下的一个叫做person.sqlite;

@property (nonatomic,copy) NSString *dbPath;

@end


static DataBaseHandle *dataBase = nil;

+ (DataBaseHandle *)sharedDataBaswHandle{

if (dataBase == nil) {

dataBase = [[DataBaseHandle alloc]init];

}

return dataBase;

}


//懒加载:重写了属性的getter方法

- (NSString *) dbPath{

if (_dbPath == nil) {

NSString *document = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];

_dbPath = [document stringByAppendingPathComponent:@"person.sqlite"];

}

return _dbPath;

}


//初始化一个数据库

static sqlite3 *db = nil;


//打开数据库

- (void)openDB{

//打开数据库函数

//在数据库里面 所有的字符串都要变成utf-8的编码格式


int result = sqlite3_open(self.dbPath.UTF8String, &db);

if (result == SQLITE_OK) {

NSLog(@"打开成功");

}else{

NSLog(@"打开失败");

}

}


//关闭数据库;

- (void)closeDB{

int result = sqlite3_close(db);

if (result == SQLITE_OK) {

NSLog(@"关闭成功");

}else{

NSLog(@"关闭失败");

}

}


//创建表


- (void)createTable{

//创建一个person表 要求字段 UID integer  主键 自增 name text,  gender text, age integer

NSString *createString = @"create table if not exists person (uid integer primary key autoincrement not null, name text, gender text, age integer)";

//第一个参数: 数据库

//第二个参数: sql语句.要使用utf-8的格式

//第三个参数: 结果的回调函数

//第四个参数: 回调函数的参数

//第五个参数: 错误信息

int result = sqlite3_exec(db, createString.UTF8String, NULL, NULL, NULL);

//判断是否创建成功

if (result == SQLITE_OK ) {

NSLog(@"创建成功");

}else{

NSLog(@"创建不成功");

NSLog(@"%d",result);

}

//打印数据库地址

NSLog(@"_dbpath == %@",_dbPath);

}


//插入一条数据


- (void) insertName:(NSString *)name gender:(NSString *)gender age:(NSInteger)age{

//插入数据的sql语句,数据不确定,所以在value里面使用 ? 代替,之后向里面绑定

NSString *insertString = @"insert into person (name, gender, age) values (?, ?, ?)";

//sqlite的伴随指针

sqlite3_stmt *stmt = nil;

//预执行sql语句

//第一个参数: 数据库

//第二个参数: sql语句

//第三个参数: 如果为正, 例如 :1 表示再去参数的时候,只取一个字节;使用负数表示取值取到碰到结束符号('\000','u000'),

//第四个参数: 伴随指针.会伴随着数据库的操作,获取值或者绑定值

//第五个参数: 取值的时候如果取得不全,那么剩下的都存在这里面

int result = sqlite3_prepare(db, insertString.UTF8String, -1, &stmt, NULL);


//如果预执行成功的话,那么就要往里面放数据了

if (result == SQLITE_OK) {

//向预执行的sql语句里面插入参数 (取代 '?'的位置)

//第一个参数 :伴随着指针

//第二个参数: '?'的位置,从1开始

//第三个参数: 插入的数据

//第四个参数: 和上面的-1是一样的

//第五个参数: 回调函数

sqlite3_bind_text(stmt, 1, name.UTF8String, -1, NULL);

sqlite3_bind_text(stmt, 2, gender.UTF8String, -1, NULL);

sqlite3_bind_int64(stmt, 3, age);

//sql语句已经全了

//执行伴随指针,如果为SQLITE_DONE代表执行成功,并且成功的插入数据

if (sqlite3_step(stmt) == SQLITE_DONE) {

NSLog(@"插入成功");

}

}

//一定要记得释放掉伴随指针

sqlite3_finalize(stmt);

}


//更新数据


- (void)updataWithUID:(NSInteger)uid{

NSString *updateString = @"update person set name = '扫军' where uid = ?";


//伴随指针

sqlite3_stmt *stmt = nil;

int result = sqlite3_prepare(db, updateString.UTF8String, -1, &stmt, NULL);


if (result == SQLITE_OK) {

sqlite3_bind_int64(stmt, 1, uid);

if (sqlite3_step(stmt) == SQLITE_DONE) {

NSLog(@"修改成功");

}else{

NSLog(@"修改失败");

}

}

sqlite3_finalize(stmt);

}


//删除简单的操作方式

- (void)deleteWithUID:(NSInteger)uid{

NSString *deleyaString = [NSString stringWithFormat:@"delete from person where uid = %ld",uid];


int result = sqlite3_exec(db, deleyaString.UTF8String, NULL, NULL, NULL);

if (result == SQLITE_OK) {

NSLog(@"删除成功");

}else{

NSLog(@"删除失败");

}

}


//查找


- (void)searchAll{

NSString *searchString = @"select * from person";

sqlite3_stmt *stmt = nil;


int result = sqlite3_prepare(db, searchString.UTF8String, -1, &stmt, NULL);

if (result == SQLITE_OK) {


//sqlite3_step(stmt) == SQLITE_ROW  的时候,代表还有下一条数据


while (sqlite3_step(stmt) == SQLITE_ROW) {


//第二个参数: 表示参数的位置 , 从0 开始

int uid = sqlite3_column_int(stmt, 0);

NSLog(@"%d",uid);


NSString *name = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)];

NSLog( @"%@",name);

NSString *gender = [NSString stringWithUTF8String:(const char *) sqlite3_column_text(stmt, 2)];

NSLog(@"%@",gender);

int age = sqlite3_column_int(stmt, 3);

NSLog(@"%d",age);

}

}

sqlite3_finalize(stmt);

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容