2.將第三方庫加載進工程:方法是直接將FMDB的源文件拖拽進工程即可;3.使用第三方庫訪問數據庫當然了,對于高手而言,對第三方庫進行了解后,上手是很快的,對于小白,只能一步一步走啦。3.1指定數據庫的存儲路徑,一般都是" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

數據庫使用之第三方庫 FMDB

系統 1677 0

下載 FMDB

?

1. 引進 sqlite3 工具箱,在要進行數據庫操作的類里引進頭文件 : 因為第三方軟件同樣是使用? sqlite 工具箱來操作數據庫的,只不過是簡化了操作,讓語法更接近 OC 的語法, 而不需要使用過多的 C 語法;

      #import <sqlite3.h>
    

2. 將第三方庫加載進工程:方法是直接將 FMDB 的源文件拖拽進工程即可;

3. 使用第三方庫訪問數據庫

當然了,對于高手而言,對第三方庫進行了解后,上手是很快的,對于小白,只能一步一步走啦。

3.1 指定數據庫的存儲路徑,一般都是在沙盒根目錄下地 Documents 文件夾下,文件的后綴名是 .sqlite:如? db_students.sqlite;

? NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent: @" Documents/db_student.sqlite " ]; ?

3.2 先創建一個 FMDatabase 的對象 *_db;

? FMDatabase *_db; ?

使用前要先初始化

? _db = [[FMDatabase alloc] initWithPath:filePath]; ?

看它的初始化方法:在初始化方法里沒有做什么多余的操作,除了指定數據庫存儲的路徑外,沒有其他操作,0x00 是一個十六進制的地址,代表 nil(或者說 NULL )

數據庫使用之第三方庫 FMDB

創建并打開數據庫:

[_db open];

這句代碼的作用有兩個:

1)若數據庫不存在,則創建并打開;

2)若數據庫已經存在,則打開數據庫;

也許你還記得:sqlite3_open(path, &_db);

這兩句代碼的作用是一樣的,只不過前者更接近 OC 的語法,其實質還是通過后者操作數據庫的。

3.3 創建表

      
        if
      
       (![_db tableExists:
      
        @"
      
      
        tb_students
      
      
        "
      
      
        ])

{

     [_db executeUpdate:
      
      
        @"
      
      
        create table tb_students (ID integer primary key not null unique, name text, age integer)
      
      
        "
      
      
        ];

} 
      
      
        //
      
      
         先調用方法,判斷表是否已經存在,若不存在則創建表
      
    

整個過程則為:

      NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:
      
        @"
      
      
        Documents/db_student.sqlite
      
      
        "
      
      
        ];

_db 
      
      =
      
         [[FMDatabase alloc] initWithPath:filePath];


      
      
        if
      
      
         ([_db open])

{

   
      
      
        if
      
       (![_db tableExists:
      
        @"
      
      
        tb_students
      
      
        "
      
      
        ])

   {

       [_db executeUpdate:
      
      
        @"
      
      
        create table tb_students (ID integer primary key not null unique, name text, age integer)
      
      
        "
      
      
        ];

    }

}

[_db close]; 
      
      
        //
      
      
         當對數據庫的操作結束后不要忘記關閉數據庫
      
    

3.4 插入、刪除、更新、查詢表的操作

第一步:打開數據庫 ?

第二部:數據庫操作

第三部:關閉數據庫

需要注意的是,在進行對表的插入、刪除、更新時,調用的方法是? - (BOOL)executeUpdate:(NSString*)sql, ...; ?

看示例:

      - (
      
        void
      
      )insertTable:(ZYStudent *
      
        )stu

{

    
      
      
        if
      
      
         ([_db open])

    {

        [_db executeUpdate:
      
      
        @"
      
      
        insert into tb_students (name, age) values (?, ?)
      
      
        "
      
      
        , stu.name, [NSNumber numberWithInt:stu.age]];

    } 
      
      
        //
      
      
         這里需要注意的是:替換 sql 語句里的 ?,不能直接使用基本類型的數據,而是需要將基本類型轉換為 對象類型,符合 OC 的語法
      
      
            

    [_db close];

}
      
    

對表進行查詢時,調用的方法是:? - (FMResultSet *)executeQuery:(NSString*)sql, ...; ?

原因大概也都知道:插入、刪除、更新操作時,主要表現出來的變化是數據表,受影響的時表中的行(即一條或幾條記錄),而查詢操作不同,進行查詢操作的目的就是要獲得表中的數據,那么就應該將獲得數據存儲,這樣就新引用了一個概念:結果集(ResultSet)。

在查詢操作里:可以簡單的將理解為結果集是用來接收查詢數據的,然后就可以將數據從結果集取出來,通過一定手段展示出來。

      - (
      
        void
      
      
        )selectTable

{

    NSMutableArray 
      
      *array =
      
         [NSMutableArray array];

    
      
      
        if
      
      
         ([_db open])

    {

        FMResultSet 
      
      *rs = [_db executeQuery:
      
        @"
      
      
        select * from tb_students
      
      
        "
      
      
        ];

        
      
      
        while
      
      
         ([rs next])

        {

            ZYStudent 
      
      *stu =
      
         [[[ZYStudent alloc] init] autorelease];

            stu.ID 
      
      = [rs intForColumnIndex:
      
        0
      
      
        ];

            stu.name 
      
      = [rs stringForColumnIndex:
      
        1
      
      
        ];

            stu.age 
      
      = [rs intForColumnIndex:
      
        2
      
      
        ];

            [array addObject:stu];

        }

    }

    [_db close];

    NSLog(
      
      
        @"
      
      
        ________%@
      
      
        "
      
      
        , array);

}
      
    

?

數據庫使用之第三方庫 FMDB


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 成人欧美午夜视频毛片 | 久久久日本精品一区二区三区 | 欧美性狂猛bbbbbbxxxx | 久久久影院| 亚洲久久在线观看 | 在线观看一级毛片免费 | 无遮挡无遮挡91桃色在线观看 | 国内精品久久久久久网站 | 国产一级毛片外aaaa | 亚洲国产日韩综合久久精品 | 大片在线播放日本一级毛片 | 国产短视频精品区第一页 | 久久久久久国产精品免费 | 久草精品视频 | 久久久久久国产精品免费免 | 亚洲精品久久久久久久福利 | 中文字幕一区在线播放 | 亚洲成人精品久久 | 99re视频精品全部免费 | 天天干天天干天天插 | 91一级片| 日韩在线 中文字幕 | 久久久久久久久久久福利观看 | 精品欧美在线精品 | 日韩在线一区视频 | 日韩中文一区 | 人人干天天干 | 欧美一级高清片欧美国产欧美 | 日产国产欧美视频一区精品 | 日韩欧美一区二区在线 | 亚洲高清成人欧美动作片 | 日本三级中文字幕 | 四虎最新永久免费视频 | 亚洲性久久久影院 | 免费在线一区二区三区 | 亚洲毛片 | 亚洲精品一线观看 | 四虎欧美永久在线精品免费 | 又粗又大的机巴好爽视频视频 | 亚洲欧美国产另类视频 | 国产成人影院一区二区 |