2。3。2SQlite的结构
以下几个比较主要的子系统将组成SQlite的体系结构:接口Interface是C语言库。在底层执行的都是C语言库,即便上层使用的API是不同种类语言的。【8】接口会将接收到的命令传给命令处理器,而SQL命令处理器由代码生成器,分析器,标志处理器组成。类似于windows和linux中的yacc的SQlite分析生成器,能够有效的防止资源泄露
并且还能更高速的生成高效率的代码。虚拟机是一个抽象的计算机引擎,为了操作数据库文件的执行。在恢复程序,底层储存与虚拟机之间,SQlite还使用了抽象层,用于执行B+树,操作系统接口和页面缓冲。B+树结构主要用于将数据库存储到磁盘,因为这样减少了磁盘的查找过程,所以可以非常快速的访问数据。页面缓冲的主要功能是处理各种机制,如B+树存储机制,读写机制所需要的数字缓冲,还有为了提交操作,保证原子性回退所需要的缓冲。操作系统接口层是一个与底层的抽象层,与操作系统有关,方便了在不同平台的操作的执行。
2。4SQlite在QT中的应用
将检测设备的检测出来的各种数据通过GPIB接口的传送,保存在计算机数据库中,这是在开发频率标准装置系统时很重要的一步。由于检测得出的数据量并非很大,所以很多时候可以使用Access数据库,但是Access数据库需要很多的系统文件支持,而且安装此数据库所需要的体积比较大,因此人们开始使用SQlite数据库。SQlite数据库不需要很多系统文件的支持,文件体积小,而且还不需要安装,如果需要到生产现场进行检测,可以用移动硬盘或者u盘,直接将系统复制到笔记本电脑或者其他电脑中,直接运行即可,不会受到软件运行环境的限制。以下是API中四个基本的重要函数:
(1)
intsqlite3 open(constchar*filename, sqlite3**ppDb);
(2)
intsqlite3 close(sqlite3 *);
(3)
intsqlite3 get table(sqlite3 *db, constchar*zSql, char* ** pazResult, int*pnRow,
int*pnColumn, char**pzErrmsg);
(4)
intsqlite3 exec(sqlite3*, constchar*sql,int(* callback)
(void*, int, char* *, char**),
void*, char**errmsg);
这四个依次是,开数据库,关数据库,操作数据库和执行语句。在运行了SQL代码之后,使用回调函数,能够回到代码的运行结果。Callback函数用来接收查到的结果,这是用户自己构造的,每次查到的内容,都会调用一次函数。以下是它原来的函数
intcallback(void* pArg, intargc, char**columnNames)
以上代码中,第一个参变量可以接收代码中的所有信息,后面的参变量表示字段的数量,第三个参变量是数组,字符串与字段值是一一对应的,第四个参变量代表的是名称。用户根据程序自己撰写的callback函数,正常情况下返回值为0。如果callback函数非0, 则代表没有成功查询。
使用QSqlQuery或QSqlQueryModel的成员函数时,需要指定一个参数,这个参数是一个连接名,如果不指定,那系统就会自动使用默认连接。在应用程序只需要连接一个数据库时,方便快捷的办法就是使用默认连接。QSqlQuery提供了一个可以执行SQL语句和查询浏览结果集的接口。如果想执行一个SQL语句,首先需要创建一个简单的QSqlQuery对象,创建好之后再调用QSqlQuery:exec()函数就可以了,比如:文献综述
QSqlQuery query;
Query。exec(“select*form student”);
在QSqlQuery构造函数中,一般需要接受一个可选的QSqlDatabase对象,用于指定使用的数据库连接是哪一个,如果没有指定连接,那系统就会使用默认连接。如果运行的时候产生了不正确的地方,那函数会返回错误,并且可以通过lasterror函数,知道哪里产生了问题。