• 数据库


    数据库:
    数据存储的方式
    1. Plist (NSArry NSDictionary),只能存储数组,字典,但是数组和字典里面不能有自定义对象
    2. 偏好设置:也不能存储自定义对象
    3. 归档:存储自定义对象,局限:一次性做读取存储操作。
    4. sqlite数据库:操作数据比较快,读取比较方便,可以局部的读取,比较小型,占用的内存资源比较小。
     
     
    什么是sqlite?一款轻型的嵌入式数据库,它占用资源非常低,在嵌入式设备中 ,可能只需要几百k就够了,它的处理速度比Mysql,PostgreSQL这两款著名数据库都还快。
     
      操作数据库的步骤:
    1. 创建数据库表,表名,通常以t_  如:t_student
    2. 设计表的字段,看下表需要存储什么数据,就添加什么什么样的字段 字段如:name  age  id(唯一标志符,要求自动增长)等。
    3. 记录数据
    SQL语句:使用SQL语言编写的程序或者代码
    SQL中的常用关键字有:select,insert,update,from,create,where,order by,group,table,view,index,desc(降序),asc(升序),等。
    特点:不区分大小写,每条语句都必须以分号结尾,数据库中不可以使用关键字做表名和字段
    数据库(SQL)语句的种类
    数据定义语句(DDL:Data Definition Language)
    包括create和drop等操作,在数据库中创建新表格(create table)和删除表格(drop table).
    数据操作语句(DML:Data Manipulation Language)
    包括insert,update(更新,修正,校正),delete等操作,上面三种操作分别用于添加,修改,删除表格中的数据
    数据查询语句(DQL:Data Query Language)  
    可用于查询表格中的数据。关键字select是DQL(也是所有SQL)用的做多的操作,其他DQL常用关键字where,order by,group by和having
    DDL:数据定义语句
    创表:
    格式:create table 表名 (字段1 字段类型1,字段2 字段类型2,…);
          create table if not exists 表名(字段1 字段类型1,字段2 字段类型2,…);
    示例:create table if not exists t_student (id integer primary key autoincrement,name text,age integer,score real);
    字段类型:SQLite将数据划分为几种存储类型integer:整形值,real:浮点型值,text:文本字符串,blob:二进制数据(比如文件)
    实际上SQLite是无类型的,计算声明为integer类型,还是能存储字符串类型文本(主键除外),建表时声明啥类型或者不声明类型都可以,也就意味着创建表语句也可以这么写:create table t_student (name,age);当然为了保持良好的编程规范,方便程序员之间的交流,编写建表语句的时候最好加上每个字段的具体类型。
    删表:
    格式:drop table 表名;
          drop table if exists 表名;
    示例:drop table if exists t_student;
    DML:数据操作语句
    插入数据:
    格式:insert into 表名 (字段1,字段2,…)values(字段1的值,字段2的值,…);
    示例:insert into t_student(name,age)values(‘mj’,10);
    注意:数据库中的字符串内容应该用单引号括住。
    更新数据:
    格式:update表名set字段1=字段1的值,字段2=字段2的值,…;
    示例:update t_student set name = ‘jack’,age = 20;
     
    注意:上面的示例会将t_student表中所有记录的name都改为jack,age改为20。
    删除数据:
    格式:delete from 表名;
    示例:delete from t_student;
    注意:上面的示例会将t_student表中的所有记录删除。只是删除记录,表不会删除掉
    条件语句:
    如果只想更新或者删除某些固定的记录,那就必须在DML语句后加上一些条件
    条件语句常见的格式
    where 字段 = 某个值;//不能用两个=
    where 子段is某个值;is相当于=
    where 子段!=某个值;
    where 子段is not某个值;//is not 相当于!=
    where 子段>某个值;
    where 子段1=某个值and字段2>某个值;and相当于c语言中的&&
    where 子段1=某个值or字段2=某个值;//or相当于c语言中的||
    示例:update t_student set name = ‘jason’ where id = 1;
          delete from t_student  where name = ‘jack’;
     
    DQL:数据查询语句
    格式
    Select 字段1,字段2,...from表名;
    select*from表名;//查询所有字段
    示例:select name,age from t_student;
          select*from t_student;
          select*from t_student where age>10;//条件查询
    排序
    按照某个字段的值,进行排序搜索
    select*from t_student order by 字段;
    select*from t_student order by age;
    默认排序是按照升序排序(从小到大),也可以变为降序(由大到小)
    Select*from t_student order by age desc;//降序
    Select*from t_student order by age asc;//升序(默认)
    也可以用多个字段进行排序
    Select*from t_student order by age asc,height desc;//先按照年龄升序排序,年龄相等就按照身高排序(降序)
     
    Limit
    使用limit可以精确地控制查询结果的数量,比如每次只查询10条数据
    格式
    Select*from表名limit数值1,数值2;
    示例
    Select*from t_student limit 4, 8;//可以理解为:跳过最前面4条语句,然后取8条记录。
    猜猜下面语句的作用
    Select*from t_student limit 7;
    相当于select*from t_student limit 0,7;//表示最前面的7条记录。
    简单约束
    建表时可以给特定的字段设置一些约束条件,常见的约束有:
    not null:规定字段的值不能为null
    unique:规定字段的值必须唯一
    default:指定字段的默认值
    (建议:尽量给字段设定严格的约束,以保证数据的规范性)
    示例
    create table t_student (id integer,name text not null unique,age integer not null default 1);
    name字段不能为null,并且唯一
    age字段不能为null,并且默认为1
    主键约束
    如果t_student表中就name和age两个字段,而且有些记录的name和age字段的值都一样时,那么就没法区分这些数据,造成数据的记录不唯一,这样就不方便管理数据
    良好的数据库编程规范应该要保证每条记录的唯一性,为此,增加了主键的约束,也就是说,每张表都必须有一个主键,用来标识记录的唯一性
    什么是主键
    主键(primary key ,简称PK)用来唯一地标识某一条记录
    例如t_student可以增加一个id字段作为主键,相当于人的身份证,主键可以是一个字段或多个字段。
    外键的约束
    利用外键的约束可以用来建立表与表之间的联系
    外键的一半情况是:一张表的某个字段,引用着另一张表的主键字段
     
    新建一个外键
    Create table   if not exists t_student (id integer primary key autoincrement,name text,age integer,class_id integer,constraint fk_student_class foreign key (class_id)references t_class(id) );
    t_student 表中有一个叫做fk_t_student_class_id_t_class_id 的外键,这个外键的作用是用t_student表中的class_id字段引用t_class表的id字段
     
    表链接
    什么是表链接查询
    需要联合多张表才能查到想要的数据
    表链接的类型
    内链接:inner join 或者join(显示的是左右表都有完整字段值得记录)
    左外链接:left outer join (保证左表数据的完整性)
    示例:查询1020班的所有学生
    Select s.name,s.age from  t_student s,t_class c where s.class_id=c.id and c.name = ‘1020’;
     
    数据库的简单实用
    之前都是保存到document,最近保存到document,苹果不允许上传。
    游戏一般是document
    //获取cache文件夹路径
    NSString*cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES)[0];
    //拼接文件名
    NSString*filePath = [cachePath stringByAppendingString:@”student.sqlite”];
    //打开数据库,就会创建数据库文件
    //fileName保存数据库的全路径文件名
    //ppDb:数据库实例
    sqlite3*db = nil;
    If(sqlite3_open(filePath.UTF8String,&db) == SQLITE_OK){
    NSLog(@”数据库打开成功”);
    }else{
    NSLog(@”数据库打开失败”);
    }
    //创建表
    //第一个参数:数据库实例,第二个参数:执行的数据库语句
    //char **errmsg:提示错误
    NSString *sql = @”create table if not exists t_student (id integer primary key autoincrement ,name text,age inteager) ;”;
    Char *errmsg;
    //执行创表语句
    Sqlite3_exec(db , sql.UTF8String,NULL,NULL,&errmsg);
    If (errmsg){
    NSLog(@”创建表失败”);
    }else{
     
    NSLog(@”创建表失败”);}
    }
     
     
  • 相关阅读:
    Spring学习8- SSH需要的jar包
    Spring学习8-SSH+Log4j黄金整合
    Spring学习8-Spring事务管理(注解式声明事务管理)
    dbvisualizer客户端执行创建存储过程或自定义函数语句的方法
    jvm的组成入门
    java的反射机制
    oracle排序子句的特殊写法与ORA-01785错误
    javascript的数据类型检测
    jsp的el表达式
    javascript模块化编程的cmd规范(sea.js)
  • 原文地址:https://www.cnblogs.com/fzkwan5438020/p/5357078.html
Copyright © 2020-2023  润新知