qt学习笔记(七)之数据库简介

转载 2015年07月09日 15:59:13

笔者最近用Qt写公司的考勤机。本来要求是要基于frameBuffer下用自己开发的easyGUI来进行上层应用开发,但是考虑到easyGUI提供的接口不是很多,就考虑用Qt来开发,顺带练练手。 废话不多说,马上进入主题。


一、QtSql模块

Qt为数据库访问提供的QtSql模块实现了数据库和Qt应用程序的无缝集成,同时为开发人员提供了一套与平台无关和具体所用数据库均无关的调用接口。这使得开发人员只需掌握基本的SQL语句,就能进行简单的数据库应用程序开发。如下表所示,QtSql模块由3部分组成。

层次 描述
驱动层 驱动层实现了特定数据库与SQL接口的底层桥接。
SQL接口层 SQL接口层提供了数据库类的访问
用户接口层 用户接口层提供从数据库数据到用于数据库表示的窗体的映射
笔者有过在linux基于ncurses开发图形界面的经验。那项目要求提供记录查询功能,当时写那个就很费脑。控件都自己封装,Qt的用户接口层仍够完美的展示出数据库信息,这样的话开发人员就不用苦于设计表格控件了。

二、数据库驱动
Qt支持数据库驱动以插件的形式添加,当我们开发的时候,首先必须明确使用哪种数据库。目前Qt支持的数据库类型如下:

我们也可以通过代码来查看本机Qt支持的数据库。

如果想要使用QtSql模块,则必须在工程文件上加入一行:

[plain] view plaincopy
  1. QT += sql  
否则无法包含头文件<QtSql>

  1. qDebug() << "Available drivers:";  
  2. QStringList drivers = QSqlDatabase::drivers();  
  3. qDebug() << drivers;  
运行程序,可以显示现在所有能用的数据库驱动了。

[plain] view plaincopy
  1. Available drivers:  
  2. ("QSQLITE")  
三、简单的应用程序

最近在做考勤机,那么就以这个为例子吧。

  1. <pre name="code" class="cpp">    
  2. if(!QSqlDatabase::drivers().contains("QSQLITE"))  
  3.     {  
  4.         //如果数据库驱动里没有SQLite,则错误警告  
  5.         QMessageBox::critical(this, tr("数据库警告"), tr("系统需添加SQLite数据库驱动"), QMessageBox::Cancel);  
  6.     }  
  7.     QSqlError error = db_Init();  
  8.     if(error.type() != QSqlError::NoError)  
  9.     {  
  10.         showError(error);  
  11.         return;  
  12.     }

  13. 我使用的是SQLite数据库,所以要先确认下系统是否已安装该驱动,错误则出现消息对话框提示。  
  14. 在db_Init() 创建一张表,并且添加了一些数据。 接下来查看数据库数据,验证是否添加正确
  15. <pre name="code" class="cpp"><pre name="code" class="cpp">
  16. QSqlError MainWindow::db_Init()  
  17. {  
  18.     //QSqlDatabase::database("syscfg.dat").close();  
  19.     //QSqlDatabase::removeDatabase("syscfg.dat");  
  20.   
  21.     QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); //添加数据库驱动  
  22.     db.setDatabaseName(":memory:");       //数据库文件名,setDatabaseName(":memory:")指的是内存数据库  
  23.   
  24.     if(!db.open())  
  25.     {  
  26.         //如果打开失败  
  27.         return db.lastError();  
  28.     }  
  29.   
  30.     //创建人员组别表,2个参量 组别ID 和组别名称  
  31.     QSqlQuery query;  
  32.     if(!query.exec("CREATE TABLE table_group(group_id INTEGER PRIMARY KEY, group_name VCHAR(10))"))  
  33.     {  
  34.         return query.lastError();  
  35.     }  
  36.   
  37.     //添加数据  
  38.     query.exec("INSERT INTO table_group VALUES(1, 'teacher')");  
  39.     query.exec("INSERT INTO table_group VALUES(2, 'student')");  
  40.   
  41.     //查看数据库  
  42.     query.exec("SELECT * FROM table_group");  
  43.   
  44.     while(query.next())       
  45.     {  
  46.         int group_id = query.value(0).toInt();  
  47.         QString group_name = query.value(1).toString();  
  48.         qDebug() << "group id=" << group_id;  
  49.         qDebug() << "group name=" << group_name;  
  50.     }  
  51.   
  52.     return QSqlError();  
  53. }
  54. 注释已经很详细了,这里只涉及了简单的SQL语句的使用。
  55. 执行程序后,可以看到我们对数据库的操作是正确的。
  56. </span></span></p><pre name="code" class="plain">
  57. group id= 1   
  58. group name= "teacher"   
  59. group id= 2   
  60. group name= "student" 

相关文章推荐

qt学习笔记(七)之数据库简介

笔者最近用Qt写公司的考勤机。本来要求是要基于frameBuffer下用自己开发的easyGUI来进行上层应用开发,但是考虑到easyGUI提供的接口不是很多,就考虑用Qt来开发,顺带练练手。 废话不...

qt学习笔记(二)之布局管理器&信号与槽(简介)

我们在上节的程序中加点小应用。主要是用到了布局管理器和信号与槽。在这里我也只是简单介绍一下~~随着后续的深入研究,接下来会具体介绍~ 一、布局管理器 #include int main(...

《Qt5学习笔记3》QApplication、信号和槽简介

可以任意分发转载,但请注明出处。 如有纰漏,请发送E-mail到artprog@163.com联系我,谢谢。 学过MFC的都很容易理解信号和槽,它们完成的功能和MFC中消息映射很相似,但是个人感觉...

QT学习笔记01简介+程序框架+父对象+项目文件

Qt介绍Qt是一个跨平台的C++图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正的组件编程。发展史1991年 Qt最早由奇...

Qt编程—学习笔记——QSlite数据库使用总结

数据库的使用主要是创建数据库,创建数据库表,输入数据库数据,查看数据库数据,导出数据库数据。 首先最重要的是*.pro文件中添加 QT  += sql。在接下来使用什么函数,请自行添加相应的类。 (1...

QT sqlite3数据库读取、容器操作、文件读写——学习笔记。

直接上代码 #include "dbpoi.h" #include #include #include #include #include #include #include...
  • swqqcs
  • swqqcs
  • 2012-06-19 21:04
  • 8444

相关滤波目标跟踪学习笔记(二)——数据库简介

目标跟踪作为计算机视觉中的一个大方向,人们对它的研究已经几十年了,但是到目前为止并没有哪个算法能达到100%的不跟丢。目标跟踪过程中存在着许多复杂干扰,比如遮挡,形变,背景干扰,光照变化等,这也是我们...

Android学习笔记:访问和添加通讯录中的联系人和联系人数据库表简介一

直接看代码,有详细注释。 1.联系人的数据库文件的位置 /data/data/com.android.providers.contacts/databases.contacts2.db ...

PHP学习笔记【一】之《数据库抽象层PDO---PDO简介、配置与启用》

一、PDO简介 PDO(PHP Data Object),数据库访问抽象层,统一各种数据库的访问接口。二、PDO特性 1、编码一致性 2、灵活性 3、高性能(PDO是由C语言编写的) 4、面...

我的Php学习笔记(六)Mysql简介和创建新的数据库 常用的SQL语句

MySQL,是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)