qt学习笔记(七)之数据库简介(所有支持数据库类型的列表)
笔者最近用Qt写公司的考勤机。本来要求是要基于frameBuffer下用自己开发的easyGUI来进行上层应用开发,但是考虑到easyGUI提供的接口不是很多,就考虑用Qt来开发,顺带练练手。 废话不多说,马上进入主题。
一、QtSql模块
Qt为数据库访问提供的QtSql模块实现了数据库和Qt应用程序的无缝集成,同时为开发人员提供了一套与平台无关和具体所用数据库均无关的调用接口。这使得开发人员只需掌握基本的SQL语句,就能进行简单的数据库应用程序开发。如下表所示,QtSql模块由3部分组成。
层次 | 描述 |
驱动层 | 驱动层实现了特定数据库与SQL接口的底层桥接。 |
SQL接口层 | SQL接口层提供了数据库类的访问 |
用户接口层 | 用户接口层提供从数据库数据到用于数据库表示的窗体的映射 |
笔者有过在linux基于ncurses开发图形界面的经验。那项目要求提供记录查询功能,当时写那个就很费脑。控件都自己封装,Qt的用户接口层仍够完美的展示出数据库信息,这样的话开发人员就不用苦于设计表格控件了。
二、数据库驱动
Qt支持数据库驱动以插件的形式添加,当我们开发的时候,首先必须明确使用哪种数据库。目前Qt支持的数据库类型如下:
我们也可以通过代码来查看本机Qt支持的数据库。
如果想要使用QtSql模块,则必须在工程文件上加入一行:
- QT += sql
否则无法包含头文件<QtSql>
- qDebug() << "Available drivers:";
- QStringList drivers = QSqlDatabase::drivers();
- qDebug() << drivers;
运行程序,可以显示现在所有能用的数据库驱动了。
- Available drivers:
- ("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学习笔记(七)之数据库简介(所有支持数据库类型的列表)的更多相关文章
- (转)Qt Model/View 学习笔记 (七)——Delegate类
Qt Model/View 学习笔记 (七) Delegate 类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...
- Linux学习笔记(七) 查询系统
1.查看命令 (1)man 可以使用 man 命令名称 命令查看某个命令的详细用法,其显示的内容如下: NAME:命令名称 SYNOPSIS:语法 DESCRIPTION:说明 OPTIONS:选项 ...
- qt学习笔记(五) QGraphicsPixmapItem与QGraphicsScene的编程实例 图标拖动渐变效果
应大家的要求,还是把完整的project文件贴出来,大家省点事:http://www.kuaipan.cn/file/id_48923272389086450.htm 先看看执行效果,我用的群创7寸屏 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(七) indigo PCL xtion pro live
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...
- Typescript 学习笔记七:泛型
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- python3.4学习笔记(七) 学习网站博客推荐
python3.4学习笔记(七) 学习网站博客推荐 深入 Python 3http://sebug.net/paper/books/dive-into-python3/<深入 Python 3& ...
- Go语言学习笔记七: 函数
Go语言学习笔记七: 函数 Go语言有函数还有方法,神奇不.这有点像python了. 函数定义 func function_name( [parameter list] ) [return_types ...
- 【web开发学习笔记】Structs2 Result学习笔记(一)简介
Structs2 Result学习笔记(一)简介 问题一 <struts> <constant name="struts.devMode" value=" ...
- iOS 学习笔记七 【博爱手把手教你使用2016年gitHub Mac客户端】
iOS 学习笔记七 [博爱手把手教你使用gitHub客户端] 第一步:首先下载git客户端 链接:https://desktop.github.com 第二步:fork 大神的代码[这里以我的代码为例 ...
- 【opencv学习笔记七】访问图像中的像素与图像亮度对比度调整
今天我们来看一下如何访问图像的像素,以及如何改变图像的亮度与对比度. 在之前我们先来看一下图像矩阵数据的排列方式.我们以一个简单的矩阵来说明: 对单通道图像排列如下: 对于双通道图像排列如下: 那么对 ...
随机推荐
- 解题报告 HDU1176 免费馅饼
免费馅饼 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- poj 2833 The Average(堆)
题目链接:http://poj.org/problem?id=2833 思路分析:由于数据量较大,超出存储范围,使用不能使用数组存储数据在进行排序.考虑维护一个最大堆与最小堆,依次读取数据, 记录数据 ...
- IOS-图片操作集合
编辑图片的几个方法 第一种 先用UIImage对象加载一张图片 然后转化成CGImageRef放到CGContext中去编辑 第二种 用CGImageCreate函数创建CGImageRef 然后把 ...
- MSSQLServer的备份与还原
最近用到了mssql2000的数据备份还原到2008上, 在备份2000时,一定注意要备份成一个文件,就是目标那里只添加一个就好,(否则待会还原数据库时要添加这两个文件,要不就报“备份了几个簇,只提供 ...
- C# 中根据datetime的值来计算属于本年的第几周,类似delphi中的weekoftheyear功能
/// <summary> /// 获得今天是今年的第几周 /// </summary> /// <param name="year">< ...
- 漂亮竖向菜单 有缓存 javascript
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 【Oracle】number类型保留小数位
SQL> SELECT TO_CHAR(, '9990.00') A, TO_CHAR(5.8, '9990.00') B, TO_CHAR(., '9990.00') C FROM dual; ...
- [NOIP 2005]-- 篝火晚会
额~~,对这组题感兴趣的具体的解题报告可以戳戳这里:http://wenku.baidu.com/view/878beb64783e0912a2162aa7.html?qq-pf-to=pcqq.c2 ...
- android术语笔记
参考:http://blog.csdn.net/luoshengyang/article/details/6618363 http://blog.csdn.net/singwhatiwanna/art ...
- UVALive 6467 Strahler Order 拓扑排序
这题是今天下午BNU SUMMER TRAINING的C题 是队友给的解题思路,用拓扑排序然后就可以了 最后是3A 其中两次RE竟然是因为: scanf("%d",mm); ORZ ...