青春可长可短, 就看自己如何度过(亦或者如白驹过隙, 稍纵即逝 正所谓且行且珍惜)
人生匆匆数十载, 说短也短, 说长也长, 看似挥霍不完的青春, 殊不知他就在你不经意间悄悄流逝, 所以时间还是贵在自己, 看自己如何度过, 如何选择, 无人可以左右你的人生, 唯一做的了主的就是你自己心中向往的那片天地!
好久没有来过这里了, 好久也没有留下自己的脚印了, 每天都是匆匆忙忙的, 在几个月后我就要收获自己所奋斗后的成果了,我想说在这短短的几个月里真的可谓是起早贪黑, 不能说什么也没有学到,但是可以说的是知识点都已普及,付出的比任何时间都多, 也许花朵已在含苞待放, 就看你怎么施肥灌溉了!
下面就是我的计划:在接下来的几个月里面我要把所有学过的东东从新再过一遍, 无论是有用的还是用的不多的都会再仔仔细细再看一遍,做到彻底的熟悉, 在这里学的是皮毛, 但是我一直都坚信什么事都怕深挖, 只要可以钻进去, 哪怕是皮毛, 你也可以将他看透, 嘿嘿 , 革命尚未成功, 同志们仍需努力啊, 愿和我在同一起跑线或者比我快的朋友们一起坚守自己的信念, 不抛弃不放弃, 因为那些最后的成功才会属于我们! Come On!
在今天的学习中我们学习了小型的数据库, 也许今天学习的东西并不多, 但是还是要和朋友们一起分享下, 让我们共同进步:
下面附上我的代码以及课堂笔记:
//由于文件的读写, 归档, NSUserDefault, 做持久化存储的时候, 是一个覆盖的过程, 效率太低, 更多的时候使用数据库来做持久化存储 //鉴于手机的硬件配置, 使用轻量级数据库(sqlite) //数据库内有很多张表, 每个表都有很多字段, 这些字段中用于做唯一标示的, 被称为主键 //SQL, 结构化查询语句, 用于对数据进行操作(增,删,改,查)的语句 //SQL语句不区分大小写 //1.创建表格 //create table 表名(字段名, 字段数据类型 是否是主键 是否为空 默认值是多少, ....) //student表为例,(ID, name, gender, photo) //create table "Student" ("ID" integer primary key not null, "name" text, "age" integer, "gender" text, "photo" blob) //2,插入数据 //insert into 表明(字段名1, 字段名2, ....) values(值1, 值2 ...) //例如:insert into "Student" (name, gender, age) values ("赵卫东", "男", "20") //3.删除数据 //delete from 表明 where字段名 = 值 //例如:delete from"Student" where ID = "6" //4.修改数据 //update 表名 set 字段名 = 值 where 字段名 = 值 //例如:update "Student" set gender = "女" where ID = 5 //5.查询数据 //select 字段名 from 表明 where 字段名 = 值 //例如:select name gender age from "Student" where ID = 3 //例如:select * from Student where name = "小强" //例如:select * from Student
下面是Student类
#import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface Student : NSObject @property (nonatomic, assign) NSInteger ID; @property (nonatomic, retain) NSString *name; @property (nonatomic, retain) NSString *gender; @property (nonatomic, assign) NSInteger age; @property (nonatomic, retain) UIImage *photo; @end #import "Student.h" @implementation Student - (void)dealloc { self.name = nil; self.photo = nil; self.gender = nil; [super dealloc]; } - (NSString *)description { return [NSString stringWithFormat:@"ID:%ld name:%@ gender:%@ age:%ld photo:%@", _ID, _name, _gender, _age, _photo]; }
同时还要创建数据库, 并主要管理数据库的打开和关闭
#import <Foundation/Foundation.h> #import <sqlite3.h>//导入支持sqlite的框架 @interface DataBase : NSObject //打开数据库, 并返回数据库指针 + (sqlite3 *)openDB; //关闭数据库 + (void)closeDB;
#import "DataBase.h" #define DATABASENAME @"DataBase.sqlite" //创建全局的数据库指针 static sqlite3 *db = nil; @implementation DataBase //打开数据库, 并返回数据库指针 + (sqlite3 *)openDB { //判断数据库是否打开 if (db == nil) { //创建文件管理类 NSFileManager *file = [NSFileManager defaultManager]; //document路径 NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]; NSLog(@"%@", path); //文件路径 NSString *filePath = [path stringByAppendingPathComponent:DATABASENAME]; //判断路径下是否有文件 if ([file fileExistsAtPath:filePath]) { NSLog(@"文件存在"); } else { //获取包中数据的路径 NSString *boundlePath = [[NSBundle mainBundle] pathForResource:DATABASENAME ofType:nil]; //把包中的数据库文件拷贝到document文件中 NSError *error = nil; BOOL result = [file copyItemAtPath:boundlePath toPath:filePath error:&error]; if (result) { NSLog(@"拷贝成功"); } else { NSLog(@"%@", error); } } //打开数据库 //参数1:文件路径 //参数2:数据库指针, 如果文件路径下由数据库的话, 打开数据库, 并把数据库指针赋值 sqlite3_open([filePath UTF8String], &db); } return db; } //关闭数据库 + (void)closeDB { sqlite3_close(db); db = nil; }
再引入sqlite3.h框架的时候还要做2步, 首先进入工程文件中, 选中工程文件夹下的Build Phases, 然后再找到其下的子文件Link Binary With Libraries(1 item)
然后在选择"+"进行文件的添加, 如果所示
这样基本上就可以到处数据, 进行增删改查了, 嘿嘿, 好了今天就到这了, 希望大家可以共同进步!
新的一天就这样结束了, 在忙碌中不知不觉的溜走了, 也许这就是时间, 一天一天的过的真快, 不过至少我的一天是充实的, 是快乐的, 因为我学有所获, 有所得! 嘿嘿, 飘了, 明天再来和大家继续分享知识点哈, 为我们的青春一起加油!