美文网首页iOS即时通讯
iOS开发数据库浅析

iOS开发数据库浅析

作者: 厕所蹲个驴 | 来源:发表于2016-01-03 18:40 被阅读5504次

    了解数据库

    https://github.com/JikerSun/-FMDB-.git

    存储数据的仓储,数据的库表,一条条数据(数据模型)key-value

    具有唯一的key  主键(primary key),  键test

    库表  student    姓名  学号  年龄  性别score

    创建库表、删除库表、插入数据、删除数据、修改数据、查找数据

    常用的数据库:SQL Server、Oracle、MySQL、DB2

    我们要学习的数据库:SQLite3

    轻量化、嵌入式设备

    数据库的基本操作语句

    SQL    (Structured Query Language)数据库操作语言

    DB  (DataBase)

    GUI工具  MesaSQLite

    键  字段  属性

    使用GUI工具创建数据库  .rdb

    iOS 创建数据库  .db

    SQLite  常用的数据类型:integer  float  varchar(容量)可自定调整大小    text(文本)  Boolean    blob (二进制)

    primary key  主键    autoincrement  自增长

    SQLite  常用的数据类型:interger  float  varchar(容量)可以自动调整大小(text (一般存储文本))    Boolean(BOOL)  blob(二进制)

    建表的语句:1

    表名            主键 类型      说明是主键  ,名字类型(预留多少个),  年龄 类型,  性别 类型

    create table student(number integer primary key,name varchar(20),age integer,gendar integer)

    主键自增长

    create table score(number integer primary key autoincrement,name varchar(20),age integer,gendar integer)

    语句2:如果表存在就不创建 如果表不存在就创建

    create table if not exists student(number integer primary key autoincrement,name varchar(20),age integer,gendar integer

    删表语句

    drop table score

    插入语句

    insert into 表名(字段1,字段2) values (字段值1,字段值2)

    insert into student(number,name,age,gendar) values(1,'赵四',18,1)

    查找语句

    全部查找          表名

    select * from student

    根据学号查找

    表名                    表达式(精确查找用”=“,模糊查找用like)

    select * from student where number=1

    (更新)修改数据语句

    表名            要改的字段          主键的值

    update student set age=65 where number=1

    删除数据语句

    全部删除表单

    表名

    delete from student

    单个元素的删除

    表名                      主键值

    delete from student where number=1

    FMDB(开源的第三方库)

    1. 非ARC模式的第三方库 -fno-objc-arc

    2.系统依赖库  libsqlite3.dylib:

    添加依赖库的方法: target—>Bulid Phases——>按添加”+”——>打入libsqlite3.dulib——>按enter确定

    FMDatabase  是一个FMDB的数据库的对象

    FMStatement 查询到的数据集合

    next  FMStatement中的方法  指向下一个元素 ( 首次使用不指向任何人元素)

    使用事务    事务 ——> 原子性(不可分割性)  隐式的操作 (高效)

    开始事务[database beginTransaction];

    提交事务 [database commit];

    例子:

    用程序进行数据库数据的添加删除修改等;

    用事务(未显示事务,显示事务)堆数据库数据进行批量的添加

    #import "ViewController.h"

    //导入FMDB头文件

    #import "FMDatabase.h"

    // 导入模型类

    #import "StudentModel.h"

    @interface ViewController ()

    @end

    @implementation ViewController

    - (void)viewDidLoad {

    [super viewDidLoad];

    #pragma mark 一.  指定数据库文件的路径

    //    1.如果路径存在  就直接读取数据库文件

    //    2.如果路径不存在  就创建响应路径的数据库文件,同时读取文件

    //    取到沙盒的路径  然后拼接到想存入的文件夹中

    //    Documents :一般把应用程序的数据存储到此文件夹下,定期向云端备份

    NSString *path=[NSString stringWithFormat:@"%@/Documents/class.db",NSHomeDirectory()];

    NSLog(@"%@",path);

    #pragma  mark    二.普通的FMDB第三方库的使用

    //  2.1  创建FMDataBase对象

    //    databaseWithPath 生成FMDataBase对象的同时传入数据库文件的路径(可能有该文件,可能没有..)

    FMDatabase *database=[FMDatabase databaseWithPath:path];

    //    2.2  打开数据库

    //    如果存在数据库的文件  直接读取文件    如果不存在数据库文件  创建并读取数据库文件

    [database open];

    //  2.3  建表

    //    student 学生信息表

    //  2.3. 1.定义一个字符串 写一个创建表的语句  如果表不存在就创建 如果存在就不创建了

    NSString * creatSQL=@"create table if not exists student(number integer primary key autoincrement,name varchar(20),age integer,gendar integer)";

    //  2.3. 2.执行建表的语句  executeUpdate  该方法执行语句

    BOOL  createSuccess=[database executeUpdate:creatSQL];

    //    如果是1 说明创建成功  如果是0 就说明创建失败 打印最后的错误信息

    NSLog(@"创建表:%d  %@",createSuccess,database.lastErrorMessage);

    /*

    #pragma  mark  创建一个模型

    StudentModel *stu=[[StudentModel alloc]init];

    stu.number=@"2";

    stu.name=@"张三";

    stu.age=@"25";

    stu.gendar=@"1";

    //2.4  插入数据 (步骤同建表)

    //    NSString *inserSQL=@"insert into student(number,name,age,gendar) values(1,'李四',36,1)";

    //    如果是插入数据模型 需要使用 ? (问号) 占位(?相当于格式控制符)  代表oc的基本对象相当于%@

    NSString *inserSQL=@"insert into student(number,name,age,gendar) values(?,?,?,?)";

    //    插入数据

    //    BOOL insertSucess=[database executeUpdate:inserSQL];

    //    插入数据模型的变量的插入数据方法

    BOOL insertSucess=[database executeUpdate:inserSQL,stu.number,stu.name,stu.age,stu.gendar];

    NSLog(@"插入语句是:%d    %@",insertSucess,database.lastErrorMessage);

    //    2,5 删除数据

    NSString *deleteSQL=@"delete from student where number=2";

    //    执行删除语句

    BOOL deleteSuccess=[database executeUpdate:deleteSQL];

    NSLog(@"删除数据:%d  %@",deleteSuccess,database.lastErrorMessage);

    //    2.6 更新语句

    NSString *updataSQL=@"update student set name='caoyu' where number=1";

    BOOL updataSuccess=[database executeUpdate:updataSQL];

    NSLog(@"更新(修改):%d  %@",updataSuccess,database.lastErrorMessage);

    //    2.7 查询

    NSString *selectSQL=@"select * from student";

    //    executeQuery  用此方法运行查询语句 返回值是FMResultSet类型

    FMResultSet *selectSet=[database executeQuery:selectSQL];

    NSLog(@"%@",selectSet);

    //    指向下一个元素  方法next返回值是bool  yes是有值  no是无值

    [selectSet next];

    while ([selectSet next])

    {

    //    根据字段的名字返回字段的值(取出的类型是 nsstring)

    //        NSString *name=[selectSet stringForColumn:@"name"];

    //  //    根据字段的名字返回字段的值(取出的类型是  int)  索引从0开始

    int age =[selectSet intForColumnIndex:0];

    NSLog(@"%d",age);

    }*/

    /**********************使用事务进行数据库操作*****************/

    /****************************未显示的使用事务*******************/

    NSDate *date=[NSDate date];

    //    未显示的使用事务

    for(int i=0;i<500;i++)

    {

    BOOL bo= [database executeUpdate:[NSString stringWithFormat:@"insert into student (name,age,gendar) values(%d,18,1)",i]];

    NSLog(@"%d",bo);

    }

    //    timeIntervalSinceDate  从某个时间到某个时间的时间间隔  单位为秒

    NSLog(@"未显示的使用事务:%f",[[NSDate date] timeIntervalSinceDate:date]);

    /*****************显示的使用事务******************/

    NSDate *date2=[NSDate date];

    //    显示的使用事务  所有的操作提交一次

    //    开始使用事务

    //    beginDeferredTransaction

    [database  beginDeferredTransaction];

    for (int i=0; i<500; i++){

    BOOL bo= [database executeUpdate:[NSString stringWithFormat:@"insert into student (name,age,gendar) values(%d,18,1)",i]];

    NSLog(@"%d",bo);

    }

    //    提交事务

    BOOL commitSuccess= [database commit];

    NSLog(@"显示的使用事务:%f",[[NSDate date] timeIntervalSinceDate:date2]);

    NSLog(@"提交事务:%d",commitSuccess);

    }

    - (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

    }@end

    相关文章

      网友评论

        本文标题:iOS开发数据库浅析

        本文链接:https://www.haomeiwen.com/subject/qklohttx.html