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

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

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

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

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

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

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

     
     
  • 相关阅读:
    linux系统telnet端口不通能收到SYN但不回SYN+ACK响应问题排查(转载)
    leveldb
    SSTable and Log Structured Storage: LevelDB
    fio terse输出详解
    bash的循环中无法保存变量
    怎样当好一个师长
    共享变量的并发读写
    Storage Systems topics and related papers
    Storage System and File System Courses
    调试std::string
  • 原文地址:https://www.cnblogs.com/dyx-wx/p/4187639.html
Copyright © 2011-2022 走看看