藍(lán)牙4.0 測(cè)試與數(shù)據(jù)的存儲(chǔ)(SQLite)

在之前的篇章 iOS之藍(lán)牙4.0 BLE相關(guān) 中已經(jīng)講到了藍(lán)牙的基本工作原理和獲取數(shù)據(jù),今天的篇章中將著重進(jìn)行實(shí)際開發(fā)中在測(cè)試時(shí)對(duì)獲取的數(shù)據(jù)進(jìn)行存儲(chǔ)
我這里對(duì)數(shù)據(jù)存儲(chǔ)方式為用的是SQLite

在正式編寫數(shù)據(jù)庫(kù)的代碼前,首先仍然是對(duì)數(shù)據(jù)庫(kù)和藍(lán)牙等的一些準(zhǔn)備工作

一 : 數(shù)據(jù)庫(kù)導(dǎo)入

  1. 創(chuàng)建一個(gè)控制器,我這里就取名稱為CJCenterManagerVC,并包含頭文件

    #import <CoreBluetooth/CoreBluetooth.h>
    
  2. 遵守協(xié)議:

    @interface CJCenterManagerVC() <CBCentralManagerDelegate, CBPeripheralDelegate>
    

3.配置數(shù)據(jù)庫(kù),libsqlite3.tdb框架,具體位置如下:


4.導(dǎo)入頭文件#import <sqlite3.h>

5.控制器.m文件下對(duì)中心管理者和數(shù)據(jù)庫(kù)等的初始化

   @interface CJCenterManagerVC () <CBCentralManagerDelegate, CBPeripheralDelegate>

   /** 中心管理者 */
   @property (nonatomic, strong) CBCentralManager *cMgr;
   /** 連接到的外設(shè) */
   @property (nonatomic, strong) CBPeripheral *peripheral;
   @property (nonatomic, assign) sqlite3 *db;
   @end

二 : 獲取數(shù)據(jù)的代碼部分

由于在之前的這篇 iOS之藍(lán)牙4.0 BLE相關(guān) 中已經(jīng)講解到數(shù)據(jù)的獲取,所以這里不再詳細(xì)講述, 我們這里直接進(jìn)行數(shù)據(jù)庫(kù)和獲取數(shù)據(jù)的代碼的講解

  • 1: 數(shù)據(jù)庫(kù)的具體搭建:
    我在開發(fā)中是在發(fā)現(xiàn)外設(shè)后調(diào)用的方法中進(jìn)行數(shù)據(jù)庫(kù)的搭建,這個(gè)方法是藍(lán)牙初始化的開始時(shí)搜索外設(shè)后調(diào)用的方法,初步數(shù)據(jù)庫(kù)的搭建請(qǐng)看注釋和下面的注解,詳細(xì)了解數(shù)據(jù)庫(kù)請(qǐng)自行學(xué)習(xí)SQLite,首先先上代碼:

    // 發(fā)現(xiàn)外設(shè)后調(diào)用的方法
    - (void)centralManager:(CBCentralManager *)central // 中心管理者
    didDiscoverPeripheral:(CBPeripheral *)peripheral // 外設(shè)
        advertisementData:(NSDictionary *)advertisementData // 外設(shè)攜帶的數(shù)據(jù)
                RSSI:(NSNumber *)RSSI // 外設(shè)發(fā)出的藍(lán)牙信號(hào)強(qiáng)度
    {
       // 在此處對(duì)我們的 advertisementData(外設(shè)攜帶的廣播數(shù)據(jù)) 進(jìn)行一些處理
       if ([peripheral.name isEqualToString:@"iTAG"] || [peripheral.name isEqualToString:@"ITAG"])
          {
              // 0.獲取沙盒地址
              NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
      NSString *sqlFilePath = [path stringByAppendingPathComponent:@"DataBank.sqlite"];
      NSLog(@"%@",sqlFilePath);
      
              // 1.打開數(shù)據(jù)
            // sqlite3 *db; // 一個(gè)db就代表一個(gè)數(shù)據(jù)庫(kù)
            // open會(huì)先判斷數(shù)據(jù)庫(kù)文件是否存在, 如果不存在會(huì)自動(dòng)創(chuàng)建數(shù)據(jù)庫(kù)文件, 然后再打開數(shù)據(jù)
            // open會(huì)返回一個(gè)int類型的值, 這個(gè)值代表著打開數(shù)據(jù)庫(kù)是否成功
            int result = sqlite3_open(sqlFilePath.UTF8String, &_db);
            if (SQLITE_OK == result)
            {
                NSLog(@"數(shù)據(jù)庫(kù)打開成功");
          
                // 2.創(chuàng)建表
                const char *sql = "CREATE TABLE IF NOT EXISTS t_DataBank (id INTEGER PRIMARY KEY AUTOINCREMENT, time text, RSSI REAL DEFAULT 1);";
          
                /*
                 第1參數(shù):需要執(zhí)行sql語(yǔ)句的數(shù)據(jù)庫(kù)
                 第2參數(shù):需要執(zhí)行的sql語(yǔ)句
                 第3參數(shù):執(zhí)行完sql語(yǔ)句之后的回調(diào)方法
                 第4參數(shù):回調(diào)方法的參數(shù)
                 第5參數(shù):錯(cuò)誤信息
                 */
                sqlite3_exec(_db, sql, NULL, NULL, &error);
                if (error)
                {
                    NSLog(@"創(chuàng)建表失敗");
                }else
                {
                    NSLog(@"創(chuàng)建表成功");
                }
         
            } else
            {
                NSLog(@"數(shù)據(jù)庫(kù)打開失敗");
            }
      
              // 標(biāo)記我們的外設(shè),讓他的生命周期 = vc
              self.peripheral = peripheral;
              // 發(fā)現(xiàn)完之后就是進(jìn)行連接
              [self.cMgr connectPeripheral:self.peripheral options:nil];
          }
    }
    

注解 : SQLite是C語(yǔ)言庫(kù),所以這里傳入的數(shù)據(jù)的沙盒地址必須為C語(yǔ)言字符串,并且在第2步中創(chuàng)建的表是將來(lái)保存數(shù)據(jù)所用
一個(gè)數(shù)據(jù)庫(kù)中可以有多個(gè)表,例如代碼中的表名稱為t_DataBank, 表中有三個(gè)數(shù)據(jù): id:自增長(zhǎng),不用我們插入數(shù)據(jù), time: text格式. RSSI值. 其余兩個(gè)數(shù)據(jù)時(shí)需要我們往里面插入數(shù)據(jù)的

  • 2:當(dāng)數(shù)據(jù)庫(kù)搭建完成后,我們就開始進(jìn)行獲取數(shù)據(jù)并往表中插入我們想要保存的數(shù)據(jù),例如RSSI的值
    在之前的篇章中我們講過(guò),在如下的方法中可以獲取RSSI的值

        //讀取到信號(hào)回調(diào)
        -(void)peripheral:(CBPeripheral *)peripheral didReadRSSI:(NSNumber *)RSSI error:(NSError *)error
        {
    
             NSString *sql = [NSString stringWithFormat:@"INSERT INTO t_DataBank( RSSI) VALUES ( %@);",  RSSI];
    
              sqlite3_exec(_db, sql.UTF8String, NULL, NULL, NULL);
        }
    

通過(guò)上面的代碼就可以將獲取到的RSSI的值插入到之前創(chuàng)建的t_DataBank表格中, 這樣由于這個(gè)方法會(huì)調(diào)用多次,所以插入的數(shù)據(jù)也是多個(gè),在測(cè)試中就可以對(duì)這些數(shù)據(jù)新型判斷整理

三 : 獲取數(shù)據(jù)庫(kù)后的一些問(wèn)題

  • 1.首先是當(dāng)你的程序運(yùn)行到模擬器上時(shí),因?yàn)槲募潜4娴诫娔X上的,所以我們通過(guò)打印沙盒地址的方法可以拿到我們創(chuàng)建好的DataBank.sql數(shù)據(jù)庫(kù), 但是如果我們?cè)谡鏅C(jī)測(cè)試時(shí),會(huì)發(fā)現(xiàn)這個(gè)打印的地址是我們手機(jī)中的地址,此時(shí)我們并沒(méi)有通過(guò)代碼的方式直接查找到數(shù)據(jù)庫(kù)的方法
    這里我給大家說(shuō)下我的辦法,也許您有更好的辦法,歡迎您留言討論
    我是下載了一個(gè)軟件, 這個(gè)軟件安裝在電腦上后可以打開與電腦相連的真機(jī),里面的您手機(jī)的APP都可以查看的到,在您的項(xiàng)目下的Document文件夾下可以找到您創(chuàng)建的數(shù)據(jù)庫(kù),這樣的軟件一般網(wǎng)上很多,您可以自行查找

  • 2.在找到數(shù)據(jù)庫(kù)后,我們一般還會(huì)面臨一個(gè)問(wèn)題,就是怎樣打開.sql的數(shù)據(jù)庫(kù)文件,我也同樣是下載了一個(gè)軟件,網(wǎng)上一般這種程序也很多, 您同樣也可以自行下載, 一般這樣的軟件支持將您獲取的N多數(shù)據(jù)導(dǎo)出為不同格式到您的電腦中,這其中包括excel表格,然后您可以將表格的數(shù)據(jù)繪制成折線圖,這樣可以更為直觀的查看數(shù)據(jù)

藍(lán)牙的數(shù)據(jù)存儲(chǔ)和測(cè)試就這些,如果有任何問(wèn)題,歡迎留言探討,讓我們一同進(jìn)步!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末何址,一起剝皮案震驚了整個(gè)濱河市鲫骗,隨后出現(xiàn)的幾起案子脓诡,更是在濱河造成了極大的恐慌归薛,老刑警劉巖箫柳,帶你破解...
    沈念sama閱讀 212,686評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異切油,居然都是意外死亡庆杜,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)述暂,“玉大人痹升,你說(shuō)我怎么就攤上這事∑杈拢” “怎么了疼蛾?”我有些...
    開封第一講書人閱讀 158,160評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)艺配。 經(jīng)常有香客問(wèn)我察郁,道長(zhǎng),這世上最難降的妖魔是什么转唉? 我笑而不...
    開封第一講書人閱讀 56,736評(píng)論 1 284
  • 正文 為了忘掉前任皮钠,我火速辦了婚禮,結(jié)果婚禮上赠法,老公的妹妹穿的比我還像新娘麦轰。我一直安慰自己,他們只是感情好砖织,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,847評(píng)論 6 386
  • 文/花漫 我一把揭開白布款侵。 她就那樣靜靜地躺著,像睡著了一般镶苞。 火紅的嫁衣襯著肌膚如雪喳坠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,043評(píng)論 1 291
  • 那天茂蚓,我揣著相機(jī)與錄音,去河邊找鬼剃幌。 笑死聋涨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的负乡。 我是一名探鬼主播牍白,決...
    沈念sama閱讀 39,129評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼抖棘!你這毒婦竟也來(lái)了茂腥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,872評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤切省,失蹤者是張志新(化名)和其女友劉穎最岗,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體朝捆,經(jīng)...
    沈念sama閱讀 44,318評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡般渡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,645評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驯用。...
    茶點(diǎn)故事閱讀 38,777評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡脸秽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蝴乔,到底是詐尸還是另有隱情记餐,我是刑警寧澤,帶...
    沈念sama閱讀 34,470評(píng)論 4 333
  • 正文 年R本政府宣布薇正,位于F島的核電站片酝,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏铝穷。R本人自食惡果不足惜钠怯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,126評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望曙聂。 院中可真熱鬧晦炊,春花似錦、人聲如沸宁脊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,861評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)榆苞。三九已至稳衬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間坐漏,已是汗流浹背薄疚。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赊琳,地道東北人街夭。 一個(gè)月前我還...
    沈念sama閱讀 46,589評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像躏筏,于是被迫代替她去往敵國(guó)和親板丽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,687評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • iOS開發(fā)藍(lán)牙4.0初識(shí)轉(zhuǎn)載 2015-09-20 15:26:44標(biāo)簽:ios開發(fā)藍(lán)牙ios開發(fā)藍(lán)牙4.0ios...
    Jany_4a9a閱讀 2,716評(píng)論 0 3
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)趁尼、插件埃碱、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,066評(píng)論 4 62
  • 夜好靜 微風(fēng)浮動(dòng)了地上的身影 你城堡里的花仙子在我身邊淺唱低吟 “好姑娘,好姑娘酥泞,看你癡癡的笑砚殿,傻呵,你的俊朗公子...
    唐妮兒閱讀 269評(píng)論 2 2
  • 天氣陰沉婶博,無(wú)風(fēng)瓮具。 去了瑜伽館荧飞,今天是陰瑜伽,很耗費(fèi)體力的名党,非常辛苦叹阔。不過(guò)應(yīng)該是有好處的。自己感覺腿比以前好了不少传睹,...
    墨墨書影閱讀 251評(píng)論 0 0