iOS開發 數據庫FMDB

iOS開發  數據庫FMDB

1.簡介

需求做用:  若是須要保存大量的結構較爲複雜的數據時候, 使用數據庫, 例如交規考試項目sql

經常使用的數據庫:數據庫

  (1)Microsoft SQL Server 2000/2008, 中小企業使用較多設計模式

  (2)Oracle 比較複雜, 大企業使用較多網站

  (3)Mysql數據庫, 網站使用較多spa

  (4)sqlite:  本地數據庫, 訪問數據足夠快, 直接訪問文件設計

         足夠簡單, 功能相對其餘數據庫軟件不是特別齊全, 足夠用了code

          足夠小, 系統不超過1M, 適合在移動端上使用orm

2. MesaSQlite使用

實例:  使用數據存儲存儲一個班上學生的信息sqlite

      學號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 if not exists StudentInfo(sid integer, 
username varchar(20), 
password varchar(20),
score varchar(20))

(2)插入數據

insert into StudentInfo(sid,username,password,score) values(1501,'zhangsan','211','80')

(3)查詢數據

<1>查詢表格中全部數據 

select * from StudentInfo;

<2>查詢指定的字段

實例:  查詢全部名字username

select username from StudentInfo

<3>根據指定的條件進行查詢

實例: 查找name爲zhansan的全部信息

select * from StudentInfo where username='zhangsan'

<4>根據多個條件進行查詢

實例: 查找username爲zhansan, 而且password爲123的全部信息

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

<5>查詢後須要排序

a.根據score升序排列

select * from StudentInfo order by score

b.根據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操做數據庫

配置 

  導入FMDB文件,

  添加二進制庫 libsqlite3.dylib,

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

#import "ViewController.h"

#import "FMDatabase.h"

@interface ViewController (){
    //建立數據庫對象
    FMDatabase *_database;
}

@end
//1.建立數據庫
-(void)createAndInitDatabase
{
    //設置路徑
    NSString *path=[NSString stringWithFormat:@"%@/Documents/stuInfo.sqlite",NSHomeDirectory()];
    //建立數據庫(若是不存在則建立打開,若是存在則直接打開)
    _database=[[FMDatabase alloc] initWithPath:path];
    if (!_database.open) {
        NSLog(@"打開失敗");
        return;
    }
    NSLog(@"打開成功");
}
//2.建立數據表
-(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(@"----b=%d",b);
}
//3.插入數據
-(void)insertData
{
    int sid=1502;
    NSString *username=@"lisi";
    NSString *password=@"231";
    NSString *score=@"90";
    NSString *sql=@"insert into StudentInfo(sid,username,password,score) values(?,?,?,?)";
    //注意:?對應的每個參數都應該是字符串,其餘類型轉化爲字符串
    BOOL b=[_database executeUpdate:sql,[NSString stringWithFormat:@"%d",sid],username,password,score ];
    NSLog(@"=======b=%d",b);
    
}
//4.查詢數據
-(void)queryData
{
    //顯示全部人得信息
    NSString *sql=@"select * from StudentInfo";
    //FMResultSet 表示查詢後結果集
    FMResultSet *resultSet=[_database executeQuery:sql];
    //next方法每次獲取一條記錄,獲取不到的返回nil
    while ([resultSet next]) {
        NSLog(@"sid = %@,name =%@,pass =%@,score =%@",[resultSet stringForColumn:@"sid"],[resultSet stringForColumn:@"username"],[resultSet stringForColumn:@"password"],[resultSet stringForColumn:@"score"]);
    }
    
}

 

//5.修改數據
-(void)setData
{
   
    NSString *username=@"lisi";
    NSString *score=@"70";
    NSString *sql=@"update StudentInfo set score='60'  where username='lisi';";
    BOOL b=[_database executeUpdate:sql,username,score ];
    NSLog(@"++++++b=%d",b);

}
//6.刪除數據
-(void)deleteData
{
    NSString *sid=@"1501";
    NSString *sql=@"delete from StudentInfo where sid='1501'";
    BOOL b=[_database executeUpdate:sql,sid];
    NSLog(@"*******b=%d",b);
}

 

5. 數據庫在項目中使用-單例設計模式

1.首先導入FMDB文件和data.sqlite

2.添加二進制庫 libsqlite3.dylib,包含頭文件#import "FMDatabase.h"

3.建立一個FirstLevelModel模型,在FirstLevelModel.h裏面本身定義屬性,導入單例

#import <Foundation/Foundation.h>
#import "FirstLevelModel.h"

@interface 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;
    
}

 本身作了一個簡單「交通考試」的實例

效果圖:

實現代碼:點我下載

相關文章
相關標籤/搜索