青春可长可短, 就看自己如何度过(亦或者如白驹过隙, 稍纵即逝 正所谓且行且珍惜)

人生匆匆数十载, 说短也短, 说长也长, 看似挥霍不完的青春, 殊不知他就在你不经意间悄悄流逝, 所以时间还是贵在自己, 看自己如何度过, 如何选择, 无人可以左右你的人生, 唯一做的了主的就是你自己心中向往的那片天地!

好久没有来过这里了, 好久也没有留下自己的脚印了, 每天都是匆匆忙忙的, 在几个月后我就要收获自己所奋斗后的成果了,我想说在这短短的几个月里真的可谓是起早贪黑, 不能说什么也没有学到,但是可以说的是知识点都已普及,付出的比任何时间都多, 也许花朵已在含苞待放, 就看你怎么施肥灌溉了!

下面就是我的计划:在接下来的几个月里面我要把所有学过的东东从新再过一遍, 无论是有用的还是用的不多的都会再仔仔细细再看一遍,做到彻底的熟悉, 在这里学的是皮毛, 但是我一直都坚信什么事都怕深挖, 只要可以钻进去, 哪怕是皮毛, 你也可以将他看透, 嘿嘿 ,  革命尚未成功, 同志们仍需努力啊, 愿和我在同一起跑线或者比我快的朋友们一起坚守自己的信念, 不抛弃不放弃, 因为那些最后的成功才会属于我们! 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)

然后在选择"+"进行文件的添加, 如果所示

这样基本上就可以到处数据, 进行增删改查了, 嘿嘿, 好了今天就到这了, 希望大家可以共同进步!

新的一天就这样结束了, 在忙碌中不知不觉的溜走了, 也许这就是时间, 一天一天的过的真快, 不过至少我的一天是充实的, 是快乐的, 因为我学有所获, 有所得! 嘿嘿, 飘了, 明天再来和大家继续分享知识点哈, 为我们的青春一起加油!

时间: 2024-08-04 15:21:51

青春可长可短, 就看自己如何度过(亦或者如白驹过隙, 稍纵即逝 正所谓且行且珍惜)的相关文章

长连接&amp;短连接分析

转自:http://www.cnblogs.com/heyonggang/p/3660600.html 1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接 时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的 经典的三次握手示意图: 经典的四次握手关闭图: 2. TCP短连接 我们模拟一下TCP短连接的情况,client向

http 长连接 &amp; 短连接

1.意义 同一个TCP连接来发送和接收多个HTTP请求/应答,而不是为每一个新的请求/应答打开新的连接的方法. 2.优 较少的CPU和内存的使用 允许请求和应答的HTTP pipelining 降低网络阻塞 减少了后续请求的延迟(无需再进行握手) 报告错误无需关闭TCP连接 3.缺 空闲的连接需要过段时间后才能被断开,可能影响整体性能(比如那些单次访问次数多的web 服务) http 长连接 & 短连接

长连接短连接长短连接争长短

其实还是这个老问题: 记一次文件下载丢包填坑之旅 http://www.cnblogs.com/syjkfind/p/5281677.html 即使现在只有haproxy-nginx-磁盘文件 比较少的转发,但文件特别大,还是偶有文件不完整的问题. 从现象上看,浏览器响应是200没问题,curl命令的日志显示是 curl: (18) transfer closed with 204800 bytes remaining to read 字面上理解就是连接已关闭.查相关资料并没有任何有关的答案,说

从段子、社交和短视频看搞笑文化的崛起

搞笑文化与人们的生活已经密不可分,在当下的互联网环境中,用户获取搞笑内容的途径实在太多,视频网站有综艺节目,直播平台有搞怪表演,短视频平台有大量的UGC和PGC供用户观看,甚至是微博和微信这样的社交软件都存在不少搞笑账号,持续输出高笑点的PGC. 近期比达咨询<2017年第2季度中国搞笑类APP产品市场研究报告>发布,数据显示截止6月底,中国搞笑类APP用户规模已经达到2800万人,环比增长5.7%.从用户规模来看,垂直搞笑APP用户基数已经较为庞大,而隐藏在如此繁盛搞笑产业背后的,实际上是一

长网址 短网址(http://www.zhihu.com/question/19852154?rf=21975802)

短网址(Short URL),顾名思义就是在形式上比较短的网址.通常用的是asp或者php转向,在Web 2.0的今天,不得不说,这是一个潮流.目前已经有许多类似服务,借助短网址您可以用简短的网址替代原来冗长的网址,让使用者可以更容易的分享链接.例如:http://t.cn/SzjPjA 短网址服务,可能很多朋友都已经不再陌生,现在大部分微博.手机邮件提醒等地方已经有很多应用模式了,并占据了一定的市场.估计很多朋友现在也正在使用. 看过新浪的短连接服务,发现后面主要有6个字符串组成,于是第一个想

HTTP的长、短连接介绍

一.长连接简介及使用 HTTP长连接:HTTP persistent connection ,也有翻译为持久连接,在HTTP1.1规定默认保持长连接,数据传输完成了保持TCP连接不断开(不会再发RST包.不会再进行四次握手),等待在同域名下继续用这个通道传输数据(与之相反的就是短连接). HTTP首部的Connection: Keep-alive是HTTP1.0浏览器和服务器的实验性扩展,当前的HTTP1.1 RFC2616文档没有对它做说明,因为它所需要的功能已经默认开启,无须带着它.但是实践

Socket 长连接 短连接 心跳 JAVA SOCKET编程

简单解释就是: 短连接:建立连接,发送数据包,关闭连接 长连接:建立连接,发送数据包,发送心跳包,发送数据包,发送心跳包,发送心跳包...... 所以又频繁的数据收发的话,短连接会频繁创建TCP连接,而对于长连接,则始终用的是同一个TCP连接 package com.tree.demo.socket; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.n

[Golang] 从零開始写Socket Server(3): 对长、短连接的处理策略(模拟心跳)

通过前两章,我们成功是写出了一套凑合能用的Server和Client,并在二者之间实现了通过协议交流.这么一来,一个简易的socket通讯框架已经初具雏形了,那么我们接下来做的.就是想办法让这个框架更加稳定.茁壮~ 作为一个可能会和非常多Client进行通讯交互的Server.首先要保证的就是整个Server执行状态的稳定性,因此在和Client建立连接通讯的时候,确保连接的及时断开非常重要,否则一旦和多个client建立不关闭的长连接,对于server资源的占用是非常可怕的.因此,我们须要针对

Google的面试题长啥样?看完被吊打!

本文翻译自Google工程师/面试官Alex Golec的文章:Google Interview Questions Deconstructed: The Knight's Dialer: 来源:实验楼,翻译:实验楼扫地阿姨 原文:https://medium.com/@alexgolec/google-interview-questions-deconstructed-the-knights-dialer-f780d516f029 作为一名Google的工程师和面试官,今天是我第二次发文分享科