IOS开发之数据库FMDB的使用

 

本文中主要介绍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;

}

 

posted @ 2015-04-03 16:46  jay张  阅读(355)  评论(0编辑  收藏  举报