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

一、QtSql模块

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

层次 描述
驱动层 驱动层实现了特定数据库与SQL接口的底层桥接。
SQL接口层 SQL接口层提供了数据库类的访问
用户接口层 用户接口层提供从数据库数据到用于数据库表示的窗体的映射

笔者有过在linux基于ncurses开发图形界面的经验。那项目要求提供记录查询功能,当时写那个就很费脑。控件都自己封装,Qt的用户接口层仍够完美的展示出数据库信息,这样的话开发人员就不用苦于设计表格控件了。

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

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

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

  1. QT += sql

否则无法包含头文件<QtSql>

  1. qDebug() << "Available drivers:";
  2. QStringList drivers = QSqlDatabase::drivers();
  3. qDebug() << drivers;

运行程序,可以显示现在所有能用的数据库驱动了。

  1. Available drivers:
  2. ("QSQLITE")

三、简单的应用程序

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

    if(!QSqlDatabase::drivers().contains("QSQLITE"))
{
//如果数据库驱动里没有SQLite,则错误警告
QMessageBox::critical(this, tr("数据库警告"), tr("系统需添加SQLite数据库驱动"), QMessageBox::Cancel);
}
QSqlError error = db_Init();
if(error.type() != QSqlError::NoError)
{
showError(error);
return;
}
我使用的是SQLite数据库,所以要先确认下系统是否已安装该驱动,错误则出现消息对话框提示。
我在db_Init() 创建一张表,并且添加了一些数据。 接下来查看数据库数据,验证是否添加正确 QSqlError MainWindow::db_Init()
{
//QSqlDatabase::database("syscfg.dat").close();
//QSqlDatabase::removeDatabase("syscfg.dat"); QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); //添加数据库驱动
db.setDatabaseName(":memory:"); //数据库文件名,setDatabaseName(":memory:")指的是内存数据库 if(!db.open())
{
//如果打开失败
return db.lastError();
} //创建人员组别表,2个参量 组别ID 和组别名称
QSqlQuery query;
if(!query.exec("CREATE TABLE table_group(group_id INTEGER PRIMARY KEY, group_name VCHAR(10))"))
{
return query.lastError();
} //添加数据
query.exec("INSERT INTO table_group VALUES(1, 'teacher')");
query.exec("INSERT INTO table_group VALUES(2, 'student')"); //查看数据库
query.exec("SELECT * FROM table_group"); while(query.next())
{
int group_id = query.value().toInt();
QString group_name = query.value().toString();
qDebug() << "group id=" << group_id;
qDebug() << "group name=" << group_name;
} return QSqlError();
}

注释已经很详细了,这里只涉及了简单的SQL语句的使用。

执行程序后,可以看到我们对数据库的操作是正确的。

group id= 1
group name= "teacher"
group id= 2
group name= "student"

就先写到这吧,明天继续。 在这里祝大家节日快乐~~

在这里附上程序源代码下载链接:qt_SQLite数据库简单应用

以上纯属个人学习笔记,如果哪里错了,希望提出。愿和大家一起共同学习,一起进步。我的邮箱地址是:xzy@yingzhi8.com

http://blog.csdn.net/fzu_dianzi/article/details/6957154

qt学习笔记(七)之数据库简介(所有支持数据库类型的列表)的更多相关文章

  1. (转)Qt Model/View 学习笔记 (七)——Delegate类

    Qt Model/View 学习笔记 (七) Delegate  类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...

  2. Linux学习笔记(七) 查询系统

    1.查看命令 (1)man 可以使用 man 命令名称 命令查看某个命令的详细用法,其显示的内容如下: NAME:命令名称 SYNOPSIS:语法 DESCRIPTION:说明 OPTIONS:选项 ...

  3. qt学习笔记(五) QGraphicsPixmapItem与QGraphicsScene的编程实例 图标拖动渐变效果

    应大家的要求,还是把完整的project文件贴出来,大家省点事:http://www.kuaipan.cn/file/id_48923272389086450.htm 先看看执行效果,我用的群创7寸屏 ...

  4. Learning ROS for Robotics Programming Second Edition学习笔记(七) indigo PCL xtion pro live

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...

  5. Typescript 学习笔记七:泛型

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  6. python3.4学习笔记(七) 学习网站博客推荐

    python3.4学习笔记(七) 学习网站博客推荐 深入 Python 3http://sebug.net/paper/books/dive-into-python3/<深入 Python 3& ...

  7. Go语言学习笔记七: 函数

    Go语言学习笔记七: 函数 Go语言有函数还有方法,神奇不.这有点像python了. 函数定义 func function_name( [parameter list] ) [return_types ...

  8. 【web开发学习笔记】Structs2 Result学习笔记(一)简介

    Structs2 Result学习笔记(一)简介 问题一 <struts> <constant name="struts.devMode" value=" ...

  9. iOS 学习笔记七 【博爱手把手教你使用2016年gitHub Mac客户端】

    iOS 学习笔记七 [博爱手把手教你使用gitHub客户端] 第一步:首先下载git客户端 链接:https://desktop.github.com 第二步:fork 大神的代码[这里以我的代码为例 ...

  10. 【opencv学习笔记七】访问图像中的像素与图像亮度对比度调整

    今天我们来看一下如何访问图像的像素,以及如何改变图像的亮度与对比度. 在之前我们先来看一下图像矩阵数据的排列方式.我们以一个简单的矩阵来说明: 对单通道图像排列如下: 对于双通道图像排列如下: 那么对 ...

随机推荐

  1. JQuery实现表格的相同单元格合并的三种方法

    代码: <!DOCTYPE html> <html> <head> <title>merge.html</title> <meta h ...

  2. Eclipse中设置tomcat的启动内存

    现象:眼下每次使用Eclipse启动Tomcat 的时候常常出现OutOfMemoryError thrown from the UncaughtExceptionHandler in thread ...

  3. UIColor深入研究(CGColor,CIColor)

    由于跟人比较喜欢研究关于图层与动画方面的技术,正打算看看别人写的好东西,就遇到了好几个问题, 第一:UIClor类方法的使用 就是关于UIColor的使用,记得之前开发中我们使用的都是UIColor后 ...

  4. JSP TAG

    Jsp tag 能够灵活的将公共JSP代码模块化,类似<jsp:include page="./include.jsp"></jsp:include>等等. ...

  5. (Problem 4)Largest palindrome product

    A palindromic number reads the same both ways. The largest palindrome made from the product of two 2 ...

  6. javascript 动态推断html元素

    在javascript中为了针对不同的元素运行不同的操作,须要在javascript中对触发事件的元素进行推断,然后运行不同的操作. 样例: html <input type='button' ...

  7. Shell中的if else语句小演示

    安安静静学习小shell,今天看到if else 喽~ 下面这个脚本是判断用户执行脚本的参数,如果是hello的话,就显示how are you 如果什么都没有,就提示输入 如果参数不是hello,就 ...

  8. HDU 3336 Count the string KMP

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3336 如果你是ACMer,那么请点击看下 题意:求每一个的前缀在母串中出现次数的总和. AC代码: # ...

  9. vector的内存释放

    转自:http://www.cnblogs.com/summerRQ/articles/2407974.html vector : C++ STL中的顺序容器,封装数组 1. vector容器的内存自 ...

  10. android 应用静默自启动的解决方法

    一个apk完全的自动静默启动目前不能实现,所以就用到了Activity的一个方法activity.moveTaskToBack(boolean),这个方法就是可以退出应用到后台而不是finish()退 ...