蓝牙4.0 测试与数据的存储(SQLite)

在之前的篇章 iOS之蓝牙4.0 BLE相关 中已经讲到了蓝牙的基本工作原理和获取数据,今天的篇章中将着重进行实际开发中在测试时对获取的数据进行存储
我这里对数据存储方式为用的是SQLite

在正式编写数据库的代码前,首先仍然是对数据库和蓝牙等的一些准备工作

一 : 数据库导入

  1. 创建一个控制器,我这里就取名称为CJCenterManagerVC,并包含头文件

    #import <CoreBluetooth/CoreBluetooth.h>
    
  2. 遵守协议:

    @interface CJCenterManagerVC() <CBCentralManagerDelegate, CBPeripheralDelegate>
    

3.配置数据库,libsqlite3.tdb框架,具体位置如下:

《蓝牙4.0 测试与数据的存储(SQLite)》

4.导入头文件#import <sqlite3.h>

5.控制器.m文件下对中心管理者和数据库等的初始化

   @interface CJCenterManagerVC () <CBCentralManagerDelegate, CBPeripheralDelegate>

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

二 : 获取数据的代码部分

由于在之前的这篇 iOS之蓝牙4.0 BLE相关 中已经讲解到数据的获取,所以这里不再详细讲述, 我们这里直接进行数据库和获取数据的代码的讲解

  • 1: 数据库的具体搭建:
    我在开发中是在发现外设后调用的方法中进行数据库的搭建,这个方法是蓝牙初始化的开始时搜索外设后调用的方法,初步数据库的搭建请看注释和下面的注解,详细了解数据库请自行学习SQLite,首先先上代码:

    // 发现外设后调用的方法
    - (void)centralManager:(CBCentralManager *)central // 中心管理者
    didDiscoverPeripheral:(CBPeripheral *)peripheral // 外设
        advertisementData:(NSDictionary *)advertisementData // 外设携带的数据
                RSSI:(NSNumber *)RSSI // 外设发出的蓝牙信号强度
    {
       // 在此处对我们的 advertisementData(外设携带的广播数据) 进行一些处理
       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.打开数据
            // sqlite3 *db; // 一个db就代表一个数据库
            // open会先判断数据库文件是否存在, 如果不存在会自动创建数据库文件, 然后再打开数据
            // open会返回一个int类型的值, 这个值代表着打开数据库是否成功
            int result = sqlite3_open(sqlFilePath.UTF8String, &_db);
            if (SQLITE_OK == result)
            {
                NSLog(@"数据库打开成功");
          
                // 2.创建表
                const char *sql = "CREATE TABLE IF NOT EXISTS t_DataBank (id INTEGER PRIMARY KEY AUTOINCREMENT, time text, RSSI REAL DEFAULT 1);";
          
                /*
                 第1参数:需要执行sql语句的数据库
                 第2参数:需要执行的sql语句
                 第3参数:执行完sql语句之后的回调方法
                 第4参数:回调方法的参数
                 第5参数:错误信息
                 */
                sqlite3_exec(_db, sql, NULL, NULL, &error);
                if (error)
                {
                    NSLog(@"创建表失败");
                }else
                {
                    NSLog(@"创建表成功");
                }
         
            } else
            {
                NSLog(@"数据库打开失败");
            }
      
              // 标记我们的外设,让他的生命周期 = vc
              self.peripheral = peripheral;
              // 发现完之后就是进行连接
              [self.cMgr connectPeripheral:self.peripheral options:nil];
          }
    }
    

注解 : SQLite是C语言库,所以这里传入的数据的沙盒地址必须为C语言字符串,并且在第2步中创建的表是将来保存数据所用
一个数据库中可以有多个表,例如代码中的表名称为t_DataBank, 表中有三个数据: id:自增长,不用我们插入数据, time: text格式. RSSI值. 其余两个数据时需要我们往里面插入数据的

  • 2:当数据库搭建完成后,我们就开始进行获取数据并往表中插入我们想要保存的数据,例如RSSI的值
    在之前的篇章中我们讲过,在如下的方法中可以获取RSSI的值

        //读取到信号回调
        -(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);
        }
    

通过上面的代码就可以将获取到的RSSI的值插入到之前创建的t_DataBank表格中, 这样由于这个方法会调用多次,所以插入的数据也是多个,在测试中就可以对这些数据新型判断整理

三 : 获取数据库后的一些问题

  • 1.首先是当你的程序运行到模拟器上时,因为文件是保存到电脑上的,所以我们通过打印沙盒地址的方法可以拿到我们创建好的DataBank.sql数据库, 但是如果我们在真机测试时,会发现这个打印的地址是我们手机中的地址,此时我们并没有通过代码的方式直接查找到数据库的方法
    这里我给大家说下我的办法,也许您有更好的办法,欢迎您留言讨论
    我是下载了一个软件, 这个软件安装在电脑上后可以打开与电脑相连的真机,里面的您手机的APP都可以查看的到,在您的项目下的Document文件夹下可以找到您创建的数据库,这样的软件一般网上很多,您可以自行查找

  • 2.在找到数据库后,我们一般还会面临一个问题,就是怎样打开.sql的数据库文件,我也同样是下载了一个软件,网上一般这种程序也很多, 您同样也可以自行下载, 一般这样的软件支持将您获取的N多数据导出为不同格式到您的电脑中,这其中包括excel表格,然后您可以将表格的数据绘制成折线图,这样可以更为直观的查看数据

蓝牙的数据存储和测试就这些,如果有任何问题,欢迎留言探讨,让我们一同进步!

    原文作者:陈长见
    原文地址: https://www.jianshu.com/p/ce456bf5e926
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞