首页 > 技术知识 > 正文

第一节 数据库技术介绍

  在嵌入式linux的Qt开发中,经常会使用到数据库。其实在所有实用的程序和软件中都会使用到数据库。Qt本身封装了数据库相关类,即使用QSqlDatabase表示一个数据库连接。在底层上,Qt 使用驱动(drivers)来与不同的数据库 API 进行交互。Qt提供了如下几种驱动:QDB2、QIBASE、QMYSQL、QOCI、QODBC、QPSQL、QSQLITE2、QSQLITE、QSYMSQL、QTDS等。

  不过,由于受到协议的限制,Qt 开源版本并没有提供上面所有驱动的二进制版本,而仅仅以源代码的形式提供。Qt 只默认搭载 QSqlite 驱动(这个驱动实际还包括 Sqlite 数据库)。我们可以选择把这些驱动作为 Qt 的一部分进行编译,也可以当作插件编译。

  例如我们可以进入Qt源码,通过./configure -h来看看都有哪些参数,并通过./configure -embedded arm -sqlite …进行驱动配置已裁剪出自己需要Qt。

./configure -h Database选项

-sql- 启用 SQL 插件,支持的驱动程序有:db2、ibase、mysql、oci、odbc、 psql、sqlite2、sqlite、tds,[all auto]。

-sqlite 选择使用 sqlite3,[system/qt]。

  一般我都会使用SQLITE3即Qt中的sqlite。SQLITE是比较轻型的数据库,小巧且处理速度也比Mysql、PostgreSQL等开源数据库快。这里不再做SQL的操作介绍指令的详细介绍(无非增删改查的语句),直接奔向Qt的数据库应。当然想对数据库有和深层的认知是必须要对相关数据可的语法熟知的。

第二节 QtSql模块介绍

Qt为开发者提供了QtSql模块,并在模块中提供了一套与平台和具体数据库君无关的调用接口,这也是我无需对SQL或者其他数据库做详细的语句介绍的原因。使用Qt数据库通过使用慢慢的对QtSql模块数据就可以了。

QtSql包含3个部分,3个部分有不同的类去实现支撑:

1、驱动层:

实现了特定数据路与SQL接口的底层桥接。

QSqlDriver、QSqlDeiverCreator、QSQLDriverCreatorBase、QSqlDeiverPlugin、QSqlResult等。

2、SQL接口层:

提提供数据库访问类。

数据库连接:QSqlDataBase;

数据库交互:QSqlQuery;

其他辅助类:QSqlError、QSqlField、QSqlTableModel 、QSqlrecord等

3、用户接口层:

提供从数据库到用于数据表示的窗体的映射

QSqlQueryModel、QSqlTableModel、QSqlRelationalTableModel

对于习惯使用SQL语法的用户,可以使用QSqlQuery类直接执行任意SQL语句并处理返回结果。

对于喜欢使用数据库接口而不喜欢使用SQL语句的用户,可以使用QSqlTableModel和QSqlRelationTableModel

第三节 SQL模型类-QSqlTableModel模型

QSqlTableModel类继承至QSqlQueryModel类,它提供了一个可读写单张SQL表的可编辑数据模型,功能:修改,插入,删除,查询,和排序。

这个模型非常强大,而且完全脱离了SQL语句,就算你不怎么懂数据库,也可以利用它进行大部分常用的操作。这个模型提供了缓冲区,可以将所有修改先保存到model中,只有当我们执行提交修改后,才会真正写入数据库。

例:在QTableView中显示数据库中表的数据

QSqlTableModel *model = new QSqlTableModel(parentObject, database);

model->setTable(“employee”);

model->setEditStrategy(QSqlTableModel::OnManualSubmit);

model->select();

model->setHeaderData(0, Qt::Horizontal, tr(“Name”));

model->setHeaderData(1, Qt::Horizontal, tr(“Salary”));

QTableView *view = new QTableView;

view->setModel(model);

view->hideColumn(0); // dont show the ID

view->show();

当然QSqlTableModel还可用于以编程方式访问数据库,而无需将其绑定到 QTableView:

QSqlQueryModel model;

model.setQuery(“SELECT * FROM employee”);

int salary = model.record(4).value(“salary”).toInt();

更详细的应用参照下一篇:

【君正X1000E之QT开发】-数据库实战(二):QtSql模块操作

猜你喜欢