
需求作用:
如果需要保存大量的结构较为复杂的数据时候, 使用数据库, 例如交规考试项目
常用的数据库:
(1)Microsoft SQL Server 2000/2008, 中小企业使用较多
(2)Oracle 比较复杂, 大企业使用较多
(3)MySQL数据库, 网站使用较多
(4)sqlite: 本地数据库, 访问数据足够快, 直接访问文件
足够简单, 功能相对其他数据库软件不是特别齐全, 足够用了
足够小, 系统不超过1M, 适合在移动端上使用
实例: 使用数据存储存储一个班上学生的信息
学号sid 用户名username 密码passWord 成绩score
1501 zhangsan 123 100
1502 lilei 321 90
1503 wangwu 222 80
(1)创建数据库
打开MesaSQlite后如果选择Cancel,这就是需要你手动创建一个属于你的数据库,
选择File-->New Database ,弹出对话框Save 填写保存的文件名和位置,


(2)创建数据表

(3)设计数据表(添加多个字段/列)


(4)数据库常用操作
增,删,改,查

SQL( Structure Query Language), 结构化查询语言, 作用就是操作数据库(创建表, 数据增删改查)

(1)创建数据表
create table if not exists StudentInfo(sid integer, username varchar(20), password varchar(20), score varchar(20))
(2)插入数据
insert into StudentInfo(sid,username,password,score) values(1503,'wangwu','222','80')
(3)查询数据
<1>查询表格中的所有数据
select * from StudentInfo;
<2>查询指定的字段
例:查询所有名字username
select username from StudentInfo
<3>根据指定的条件进行查询
例:查找username为zhangsan的所有信息
select * from StudentInfo where username='zhangsan'
<4>根据多个条件进行查询
例:查找username为zhangsan,并且password为123的所有信息
select * from StudentInfo where username='zhangsan' and password='123'
<5>查询后按需要排序
例:根据age升序排序
降序排列
select * from StudentInfo order by score
升序排列
select * from StudentInfo order by score desc
<6>获取,查询数据的行数或个数
select count(*) from StudentInfo
(4)修改数据
update StudentInfo set score='100' where username='zhangsan';
(5)删除数据
delete from StudentInfo where sid='1503'
导入文件,
添加二进制库 libsqlite3.dylib,
包含头文件#import "FMDatabase.h"
注意:说明一下iOS的安全机制————沙盒机制
//沙盒机制
-(void)SandBox
{
//IOS安全机制 - 沙盒
//(1)每个应用内容度放在一个沙盒目录下面
//(2)每个应用只能修改自己沙盒目录下得文件,其他应用文件无法修改
//(3)默认文件Documents,Library,tmp
//开发:自己创建的文件放在Documents下面
//确定文件位置
//当前应用文件夹 :NSHomeDirectory()
NSLog(@"%@",[[NSFileManager defaultManager] contentsOfDirectoryAtPath:NSHomeDirectory() error:nil]);
NSLog(@"home == %@",NSHomeDirectory());
}
a.创建数据库
-(void)creatAndInitFMDBDatabase{
//设置路径
NSString *path = [NSString stringWithFormat:@"%@/Documents/stuInfo.sqlite",NSHomeDirectory()];
//创建数据库(如果不存在则创建打开,如果存在则直接打开)
_database = [[FMDatabase alloc]initWithPath:path];
if (!_database.open) {
NSLog(@"失败");
return;
}
NSLog(@"成功");
}
b.创建数据表
-(void)createTable{
//executeQuery用来执行select语句
//其他语句使用executeUpdate
// _database executeQuery:<#(NSString *), ...#>
NSString *sql = @"create table if not exists StudentInfo(sid integer,username varchar(20),password varchar(20),score varchar(20))";
BOOL b = [_database executeUpdate:sql];
NSLog(@"creatTable = %d",b);
}
c.插入数据
-(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 = %d",b);
}
d.查询数据
-(void)queryData{
NSString *sql = @"select * from StudentInfo";
FMResultSet *resultSet = [_database executeQuery:sql];
while ([resultSet next]) {
NSLog(@"sid = %@, username = %@, password = %@, score = %@",[resultSet stringForColumn:@"sid"],[resultSet stringForColumn:@"username"],[resultSet stringForColumn:@"password"],[resultSet stringForColumn:@"score"]);
}
}
e.修改和删除
//参照数据的插入和查询
导入文件,
添加二进制库 libsqlite3.dylib,
包含头文件#import "FMDatabase.h"
a.创建一个DatabaseManager的单例(继承NSObject),里面添加两个方法并实现
//获取单例对象 +(id)sharedInstance; //获取第一级目录 -(NSArray *)firstLevels;
#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;
}
b.实现
c.创建模型model(FirstLevelModel,继承NSObject)
#import <Foundation/Foundation.h> @interface FirstLevelModel : NSObject @PRoperty (copy,nonatomic) NSString *pid; @property (copy,nonatomic) NSString *pname; @property (copy,nonatomic) NSString *pcount; @end
导入单例DatabaseManager的头文件
#import "ViewController.h"
#import "DatabaseManager.h"
@interface ViewController ()<UITableViewDataSource,UITableViewDelegate>{
UITableView *_tableView ;
NSMutableArray *_dataArray;
}
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//初始化_dataArray
_dataArray = [[NSMutableArray alloc]init];
//获取单例
DatabaseManager *manager = [DatabaseManager sharedInstance];
//通过遍历单例创建Model
for (FirstLevelModel *model in manager.firstLevels) {
NSLog(@"name = %@",model.pname);
//把遍历后的数据加入到_dataArray中
[_dataArray addObject:model];
}
NSLog(@"%d",manager.firstLevels.count);
[self creatTableView];
}
//创建tableView
-(void)creatTableView{
_tableView = [[UITableView alloc]initWithFrame:self.view.bounds style:UITableViewStylePlain];
_tableView.delegate = self;
_tableView.dataSource = self;
//返回cell的高度
_tableView.rowHeight = 50;
[self.view addSubview:_tableView ];
//给_dataArray的数据赋值
_dataArray = [[NSMutableArray alloc]initWithArray: [[DatabaseManager sharedInstance] firstLevels]];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
NSLog(@"%d",[[[DatabaseManager sharedInstance] firstLevels] count]);
return [[[DatabaseManager sharedInstance] firstLevels] count];
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *inde = @"cellId";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:inde];
if (cell == nil) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:inde];
}
//创建model获取数据并给cell赋值
FirstLevelModel *model = _dataArray[indexPath.row];
cell.textLabel.text = model.pname;
return cell;
}
//是否可以编辑
-(BOOL) tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{
return YES;
}
代码下载