本文中主要介绍ios数据库常用的软件以及常用的数据库操作方法。
1、数据库基本知识介绍
数据量小,结构简单,数据保存可采用归档,plist(xml格式),存进去的效率很低;
数据复杂,格式多,量大,用数据库存取效率高,比如交规考试项目的数据存储;
本地数据--->网络数据--->本地(一次取数据,多次取数据)
1.1常用数据库
(1).MicroSoft SQL Server ...2000/2008 中小企业使用较多
(2).Oracle,比较复杂,大企业使用较多
(3).Mysql 数据库,网站使用较多
(4).sqlite: 以上3个是网络数据库,发送网络请求拿到数据,sqlite是一个本地数据库,不经过网络,直接访问文件,速度快。
足够简单,占用空间小,适合在移动段上面使用。但功能相对其他大的数据库来说不够齐全。在微信,QQ中使用很广泛.(同步推软件)
2、MesaSQlite软件使用
可以额外多学习数据库原理,数据库操作知识。
实例:使用数据存储一个班上学生的信息
学号ID 用户名UserName 密码 passWord 成绩 score
1 zhangsan 123 100
2 lilei 321 200
(1).创建一个数据库
(2).创建一个数据表进行存储
(3).设计数据表,添加多个字段/列
(4).数据库常用的操作,增删改查
3、SQL的结构化查询语句
SQL :指的是structure query language ,结构化查询语言,用来操作数据库(创建表,数据进行增删查改)。
3.1 创建表
create table studentiInfomation (tid integer,username varchar(30),password varchar(30),score varchar(30))
插入数据到表中
insert into studentInfomation (sid,username,password,score) values (1501,'zhangsan','123','90') insert into studentInfomation (sid,username,password,score) values (1502,'lisi','1234','88'); insert into studentInfomation (sid,username,password,score) values (1503,'wangwu','321','50') ; insert into studentInfomation (sid,username,password,score) values (1504,'xiaoming','123456','100') ;
3.2查询
select username from studentInfomation
3.3 查询指定的条件
select *from studentInfomation where username ='zhangsan'
3.4根据多个条件查询
select *from studentInfomation where username ='zhangsan' and password='123'
3.5按照升序或者降序排列
降序
select *from studentInfomation order by score desc
升序
select *from studentInfomation order by score
3.6数据个数的查询
select count(*) from studentInfomation
3.7修改数据
pdate studentInfomation set score ='100' where username ='zhangsan';
3.8 删除数据
delete from studentInfomation where sid ='1503'
3.9查询表格数据个数
select count(*) from studentInfomation
4.FMDB操作数据库
4.1配置
(1)/导入文件,ios安全机制--沙盒。
(2).每个应用都是放在一个沙盒下面,每个应用只能修改自己沙盒目录下的文件,其他文件无法修改。
(3).默认文件夹:Documents,Library,tmp.开发过后,自己创建的文件要放在Documents下面。
创建数据库
[self createAndInitDatabase]; -(void)createAndInitDatabase { NSString *path =[NSString stringWithFormat:@"%@/Documents/stuInfo.sqlite",NSHomeDirectory()]; _dataBase =[[FMDatabase alloc] initWithPath:path]; if (!_dataBase.open) { NSLog(@"打开失败"); return; } NSLog(@"打开成功"); }
创建表格
[self createTable]; -(void)createTable { NSString *sql =@"create table if not exists " "StudentInfo(sid integer," "username varchar(20),""password varchar(20),""score varchar(20));"; //executeQuery用来执行select语句 //其他语句使用execut BOOL b= [_dataBase executeUpdate:sql]; NSLog(@"create b =%d",b); }
插入数据
[self insertData]; -(void)insertData{ int sid =1501; NSString *username =@"zhangsan"; NSString *password =@"123"; NSString *score =@"100"; NSString *sql =@"insert into StudentInfo(sid,username,password,score) values(?,?,?,?)"; //问号对于每一个参数都要传入字符串类型,其他类型需要先转化为字符串 BOOL b=[_dataBase executeUpdate:sql,[NSString stringWithFormat:@"%d",sid],username,password,score]; NSLog(@"insertData b ==%d",b); }
查询数据
[self queryData]; -(void)queryData { NSString *sql =@"select *from StudentInfo"; //next方法每次获取一条记录,获取不到返回nil,next刚开始指向-1行 FMResultSet *resultSet =[_dataBase executeQuery:sql]; while ([resultSet next]) { NSLog(@"sid = %@,name =%@,pw =%@,score=%@",[resultSet stringForColumn:@"sid"],[resultSet stringForColumn:@"username"],[resultSet stringForColumn:@"password"],[resultSet stringForColumn:@"score"]); } }
5.数据库+单例设计模式。
创建一个单例,存储从数据库获得的数据,然后从代理中调用数据。
#import "DatabaseManager.h" #import "FMDatabase.h" @interface DatabaseManager() { FMDatabase *_database; } @end @implementation DatabaseManager +(id)sharedInstance { static DatabaseManager *dc =nil; if (dc==nil) { dc =[[[self class] alloc ] init]; } return dc; } -(id) init { if (self = [super init]) { [self openDatabase]; } return self; } -(void)openDatabase { NSString *path =[[NSBundle mainBundle] pathForResource:@"data.sqlite" ofType:nil]; _database =[[FMDatabase alloc] initWithPath:path]; if (!_database.open) { NSLog(@"打开失败"); } } //获取第一级数据 -(NSArray *)firstLevels { NSString *sql =@"select * from firstlevel"; FMResultSet *resultSet =[_database executeQuery:sql]; NSMutableArray *marr = [[NSMutableArray alloc] init]; while ([resultSet next]) { // FirstLevelModel *model =[[FirstLevelModel alloc] init]; model.pid =[resultSet stringForColumn:@"pid"]; model.pname =[resultSet stringForColumn:@"pname"]; model.pcount =[resultSet stringForColumn:@"pcount"]; [marr addObject:model]; } return marr; }