【ok210试用体验】项目篇+物联仓库管理系统+前端数据中心 03 - 在线问答 - 电子技术论坛 - 最好最受欢迎电子论坛!

【ok210试用体验】项目篇+物联仓库管理系统+前端数据中心 03

himol ( 楼主 ) 2015-10-21 10:41:18  只看该作者 倒序浏览
本帖最后由 himol 于 2015-10-21 10:46 编辑

第三节:数据库模块
1、sqlite3介绍
(1)sqlite3基础介绍
     sqlite3 提供的是一些 C 函数接口,你可以用这些函数操作数据库。通过使用这些接口,传递一些标准 sql 语句(以 char * 类型)给 sqlite 函数, sqlite 就会为你操作数据库。
sqlite3 跟 MS 的 access 一样是文件型数据库。就是说,一个数据库就是一个文件,此数据库里可以建立很多的表,可以建立索引、触发器等等,但是,它实际上得到的就是一个文件。备份这个文件就备份了整个数据库。
     sqlite3 不需要任何数据库引擎,这意味着如果你需要 sqlite 来保存一些用户数据,甚至都不需要安装数据库
(2)介绍数据库基本操作——基本流程关键数据结构
     sqlite3 里最常用到的是 sqlite3 * 类型。从数据库打开开始, sqlite3 就要为这个类型准备好内存,直到数据库关闭,整个过程都需要用到这个类型。当数据库打开时开始,这个类型的变量就代表了你要操作的数据库。下面再详细介绍。
     打开数据库:
       int sqlite3_open( 文件名 , sqlite3 ** );
       作用:用这个函数开始数据库操作。
       文件名:数据库文件名,比如: c:\warehouse.db 。
       注意:文件名不需要一定存在,如果此文件不存在,
             sqlite 会自动建立它。        
       如果它存在,就尝试把它当数据库文件来打开。
       sqlite3 ** :参数即前面提到的关键数据结构。这个结构底层
                    细节如何,你不要关它。
  函数返回值:表示操作是否正确,如果是 SQLITE_OK 则表示操作正常。
             反之则不正常。

  关闭数据库:
       int sqlite3_close(sqlite3 *);
       作用:用这个函数关闭数据库操作。
执行 sql 语句
       int sqlite3_exec(sqlite3*, const char *sql, sqlite3_callback,
                                               void *, char **errmsg );
这就是执行一条 sql 语句的函数。
第 1 个参数:open 函数得到的指针。是关键数据结构。
第 2 个参数:const char *sql 是一条 sql 语句,以 结尾。
第 3 个参数:sqlite3_callback 是回调函数,当这条语句执后,
            sqlite3 会去调用你提供的这个函数。
第 4 个参数:void * 是你所提供的指针,你可以传递任何一个指针参数
            到里,这个参数最终会传到回调函数里面,如果不需要传递
            指针给回调函数,可以填 NULL 。        
第 5 个参数:char ** errmsg 是错误信息。注意是指针的指针。

2、数据库模块流程图及结构图
  (1)sqlite线程流程图
主程序开始运行之后,各任务线程开始运行,其中就包括的了数据库的pthread_sqlite。pthread_sqlite线程开始创建一个用于存储对数据库操作的链表,链表创建之后进入while(1)循环。循环中,用pthread_cond_wait函数语句进行睡眠等待,等待其他线程的唤醒函数pthread_cond_signal发来的信号,唤醒之后再次进入一个while(1)的循环语句,在这个循环中,我们进行对链表头的判空工作。如果链表头不为空,则读取第一个节点的内容,把借点中的内容解析出来,把解析出来的内容作为参数传到sqlite_task函数中,完成相应的数据库操作并释放节点空间,如此循环;如果链表头为空,则直接跳出while
       1)循环,再回到外部循环的pthread_cond_wait函数进行睡眠等待 ,等待下一次被其他线程唤醒。
       2)sqlite_task()结构图

    在上面的pthread_sqlite线程流程图中,提到了sqlite_task函数。它用来完成读取节点信息之后的数据库操作。对数据库的操作主要是读取sqlite_operation结构中成员变量来完成的。通过sqlite_operation中的table_select_mask来判断是对数据库中的哪个表进行操作,然后再分别通过env_operation_mask、table_operation_mask和goods_operation_mask来判断对选择的表进行什么具体的操作,例如,更新、查看和插入等等。
3、数据库模块使用的相关结构体
(1)结构体一:所有仓库的信息

(2)结构体二:某个仓库的所有信息

(3)结构体三:某种货物的信息

(4)结构体四:

4、Sqlite3数据库中数据的存储形式
表一:仓库环境表(environment)


表二:仓库环境温度表(collect_env)

表三:仓库货物表(goods)


0个回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则


关闭

站长推荐上一条 /6 下一条

小黑屋|手机版|Archiver|电子发烧友 ( 湘ICP备2023018690号 )

GMT+8, 2024-12-22 10:50 , Processed in 0.348202 second(s), Total 36, Slave 26 queries .

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

微信扫描
快速回复 返回顶部 返回列表