【君正X1000E之QT开发】-数据库实战(一):数据库技术与QtSql模块介绍

MacianYuan 2020-08-30 10:56:46 3260
第一节 数据库技术介绍

  在嵌入式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-<driver> 启用 SQL <driver> 插件,支持的驱动程序有: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语句的用户,可以使用QSqlTableModelQSqlRelationTableModel

第三节 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); // don't 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模块操作

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 2 1 评论 打赏
评论
2个
内容存在敏感词
手气红包
  • MacianYuan 2020-09-04 17:54:59
    回复

    @david 谢谢david支持,跟着大佬混,总会有出头日子

  • david 2020-09-04 12:04:30
    回复

    看牛逼的人仗剑走天涯~

相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
MacianYuan
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区