zoukankan      html  css  js  c++  java
  • iOS开发之数据库FMDB

    iOS开发之数据库FMDB

      1.简介

    需求作用:  如果需要保存大量的结构较为复杂的数据时候, 使用数据库, 例如交规考试项目

    常用的数据库:

      (1)Microsoft SQL Server 2000/2008, 中小企业使用较多

      (2)Oracle 比较复杂, 大企业使用较多

      (3)Mysql数据库, 网站使用较多

      (4)sqlite:  本地数据库, 访问数据足够快, 直接访问文件

             足够简单, 功能相对其他数据库软件不是特别齐全, 足够用了

              足够小, 系统不超过1M, 适合在移动端上使用

      2. MesaSQlite使用

    实例:  使用数据存储存储一个班上学生的信息

          学号sid  用户名username  密码password 成绩score

          1501    zhangsan      123      100

          1502    lilei         321      90

          1503    wangwu        222      80 

    (1)创建数据库 

    (2)创建数据表

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

    (4)数据库常用操作

      增,删,改,查

      3. SQL结构化查询语句

      

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

    (1)创建数据表

    create table StudentInfo(sid integer, 
    
    username varchar(20), 
    
    password varchar(20),
    
    score varchar(20))
    
     
    
    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>根据指定的条件进行查询

    实例: 查找name为zhansan的所有信息

    select * from StudentInfo where username='zhangsan' 

    <4>根据多个条件进行查询

    实例: 查找uname为zhansan, 并且性别为boy的所有信息

    select * from StudentInfo where username='zhangsan' and password='123'

    <5>查询后需要排序

    //根据age升序排列
    
    select * from StudentInfo order by score
    
     //根据age降序排列
    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'

      4. FMDB操作数据库

     

    (1)配置 

      导入文件,

      添加二进制库 libsqlite3.dylib,

      包含头文件#import "FMDatabase.h"

      5. 数据库在项目中使用-单例设计模式

    (1)单例的声明与实现

    #import <Foundation/Foundation.h>
    #import "FirstLevelModel.h"
    #import "SecondLevelModel.h"
    #import "LeafLevelModel.h"
    @interface DatabaseManager : NSObject
    //获取单例对象方法
    +(id)shareINstance;
    //获取第一级目录
    -(NSArray *)firstLevels;
    //获取第二级目录
    -(NSArray *)secondLevels:(NSString *)str;
    //获取第三级目录
    -(NSArray *)leafLevels:(NSString *)str;
    @end
    #import "DatabaseManager.h"
    #import "FMDatabase.h"
    @interface DatabaseManager()
    {
        FMDatabase *_database;
    }
    @end
    @implementation DatabaseManager
    
    //获取单例对象方法
    +(id)shareINstance
    {
        static DatabaseManager *dc = nil;
        if (dc==nil) {
            dc = [[DatabaseManager 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 *muArr = [[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"];
            [muArr addObject:model];
            
        }
        return muArr;
    }
    //获取第二级目录
    -(NSArray *)secondLevels:(NSString *)str
    {
        NSString *sql = @"select * from secondlevel where pid=?";
        FMResultSet *resultSet = [_database executeQuery:sql,str];
        NSMutableArray *muArr = [[NSMutableArray alloc] init];
        while ([resultSet next]) {
            //
            SecondLevelModel *model = [[SecondLevelModel alloc] init];
            model.pid = [resultSet stringForColumn:@"pid"];
            model.sid = [resultSet stringForColumn:@"sid"];
            model.sname = [resultSet stringForColumn:@"sname"];
            model.scount = [resultSet stringForColumn:@"scount"];
            [muArr addObject:model];
            
        }
        return muArr;
    
    }
    //获取第三级目录
    -(NSArray *)leafLevels:(NSString *)str
    {
        NSString *sql = @"select * from leaflevel where sid=?";
        FMResultSet *resultSet = [_database executeQuery:sql,str];
        NSMutableArray *muArr = [[NSMutableArray alloc] init];
        while ([resultSet next]) {
            //
            LeafLevelModel *model = [[LeafLevelModel alloc] init];
            model.pid = [resultSet stringForColumn:@"pid"];
            model.sid = [resultSet stringForColumn:@"sid"];
            model.sname = [resultSet stringForColumn:@"sname"];
            model.pname = [resultSet stringForColumn:@"pname"];
            model.mquestion = [resultSet stringForColumn:@"mquestion"];
            model.mdesc = [resultSet stringForColumn:@"mdesc"];
            model.mid = [resultSet stringForColumn:@"mid"];
            model.manswer = [resultSet stringForColumn:@"manswer"];
            model.munknow = [resultSet stringForColumn:@"munknow"];
            model.mtype = [resultSet stringForColumn:@"mtype"];
            model.mimage = [resultSet stringForColumn:@"mimage"];
            [muArr addObject:model];
            
        }
        return muArr;
    }
    
    @end

    点击下载代码

  • 相关阅读:
    js数组去重
    js和jq实现全选反选
    js的作用域深入理解
    js对数组的常用操作
    如何写出让java虚拟机发生内存溢出异常OutOfMemoryError的代码
    JAVA编程思想(第四版)学习笔记----4.8 switch(知识点已更新)
    通过拦截器Interceptor实现Spring MVC中Controller接口访问信息的记录
    JAVA编程思想(第四版)学习笔记----11.10 Map
    JAVA中的for-each循环与迭代
    JAVA编程思想(第四版)学习笔记----11.5 List,11.6迭代器
  • 原文地址:https://www.cnblogs.com/DAIZHUGUQIN/p/4393761.html
Copyright © 2011-2022 走看看