zoukankan      html  css  js  c++  java
  • 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;
    
    }
  • 相关阅读:
    SpringBoot之SpringApplication
    IP数据库
    Android长按及拖动事件探究
    5.7之sql_model
    Linux 信号介绍
    设计模式详解及PHP实现:代理模式
    为你的AliOS Things应用增加自定义cli命令
    DRDS SQL 审计与分析——全面洞察 SQL 之利器
    下一代大数据处理引擎,阿里云实时计算独享模式重磅发布
    2135亿背后的双11项目协作怎么玩?
  • 原文地址:https://www.cnblogs.com/jayzhang/p/4389099.html
Copyright © 2011-2022 走看看