iOS开发之数据库FMDB

iOS开发之数据库FMDB

 1.简介

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

经常使用的数据库:数据库

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

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

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

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

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

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

2. MesaSQlite使用

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

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

      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

 

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. 数据库在项目中使用-单例设计模式

 

#import "FMDatabase.h"

@interface ViewController ()
{
    //数据库对象
    FMDatabase *_database;
}
    //实例: 存储学生信息
    
    //(1)建立数据库
    [self createAndInitDatabase];
    
    //(2)建立数据表
    [self createTable];
    
    //(3)插入数据
    //[self insertData];
    
    //(4)查询数据
    [self queryData];
    
    //(5)修改和删除数据
    //参考: 插入数据
}
-(void)queryData
{
    //显示全部人的信息
    NSString *sql = @"select * from StudentInfo";
    //FMResultSet 表示查询后结果集
    FMResultSet *resultSet = [_database executeQuery:sql];
    
    //next方法每次获取一条记录, 获取不到返回nil
    while ([resultSet next]) {
        NSLog(@"sid = %@,name=%@,pa=%@,score=%@",
              [resultSet stringForColumn:@"sid"],
              [resultSet stringForColumn:@"username"],
              [resultSet stringForColumn:@"password"],
              [resultSet stringForColumn:@"score"]);
    }
    
    
}
-(void)insertData
{
    int sid = 1502;
    NSString *username = @"lilei";
    NSString *password = @"321";
    NSString *score = @"80";
    NSString *sql = @"insert into StudentInfo(sid,username,password,score) values(?,?,?,?)";
    //注意: ?对应的每个参数都应该是字符串, 其余类型转化为字符串
    BOOL b = [_database executeUpdate:sql,[NSString stringWithFormat:@"%d",sid], username, password, score];
    NSLog(@"insert b = %d",b);
    
}
-(void)createTable
{
    NSString *sql = @"create table if not exists "
    "StudentInfo(sid integer,"
    "username varchar(20),"
    "password varchar(20),"
    "score varchar(20));";
    
    //executeQuery用来执行select语句,
    //其余语句使用executeUpdate

    BOOL b = [_database executeUpdate:sql];
    NSLog(@"create b = %d",b);

    
    
    
}
-(void)testSandbox
{
    //iOS安全机制 - 沙盒
    //(1). 每一个应用内容都放在一个沙盒目录下面
    //(2). 每一个应用只能修改本身沙盒目录下的文件, 其余应用文件没法修改
    //(3). 默认文件夹 Documents,Library,tmp
    //开发: 本身建立的文件放在Documents下面
    
    
    //肯定文件位置
    //当前应用文件夹: NSHomeDirectory()
    //NSLog(@"home = %@",NSHomeDirectory());
    //NSLog(@"%@",[[NSFileManager defaultManager] contentsOfDirectoryAtPath:NSHomeDirectory() error:nil]);
}
-(void)createAndInitDatabase
{
    //设置路径
    NSString *path = [NSString stringWithFormat:@"%@/Documents/stuInfo.sqlite",NSHomeDirectory()];
    //建立数据库(若是不存在则建立打开, 若是存在则直接打开)
    _database = [[FMDatabase alloc] initWithPath:path];
    if(!_database.open)
    {
        NSLog(@"打开失败");
        return;
    }

    NSLog(@"打开成功");
    
    
}
相关文章
相关标签/搜索