iOS开发数据库浅析

了解数据库

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


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容