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学习笔记七】访问图像中的像素与图像亮度对比度调整
今天我们来看一下如何访问图像的像素,以及如何改变图像的亮度与对比度. 在之前我们先来看一下图像矩阵数据的排列方式.我们以一个简单的矩阵来说明: 对单通道图像排列如下: 对于双通道图像排列如下: 那么对 ...
随机推荐
- Cocos2d-x 创建自己定义项目模板
你是否以前为cocos方便高速开发而兴奋,你是否以前为各种工具的便利开发而感动,但如今的你是否为每次创建一个新的项目都是HelloWorldScene而苦恼? 好吧,事实上我也感觉到了,每次创建一个项 ...
- hdu 4737
题目链接 直接暴力,或运算只会越来越大 #include <cstdio> #include <cstring> using namespace std; #define N ...
- IOS SWIFT基本画图教程
OS SWIFT基本画图教程 其实这是以前做过的一个例子,方便自己参考的代码!希望对大家也有点参考. 首先,建立一个Swift类,继承UIView这个类,然后重写 func drawRect(rect ...
- SQL语句简单记录
SQL SERVER 新增列与默认值 alter table 表名 add 列明 bit default 0 not null 删除列(容易删除失败) alter table 表名 drop colu ...
- (记录前面算过的后面仍然会用的数减小复杂度)A - AC Me
Description Ignatius is doing his homework now. The teacher gives him some articles and asks him to ...
- 我的wifi
首先利用百度查找 怎么承载网络,托管网络的用户名和密码 . 1.以管理员身份运行命令提示符: 快捷键win+R→输入cmd→回车 2.启用并设定虚拟WiFi网卡: 运行命令:netsh wlan se ...
- iPhone开发技巧之日志保存教程
http://mobile.51cto.com/iphone-283337.htm Objective-C开发程序的时候,有专门的日志操作类NSLog,它将指定的输出到标准的错误输出上(stderr) ...
- Week11(11月19日):补课
Part I:提问 =========================== 1.如何增加一条记录到数据库? Part II:案例学习 =========================== Music ...
- 设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型)
设计模式(十二)职责链模式(Chain of Responsibility)(对象行为型) 1.概述 你去政府部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决,不能解决就 ...
- 年度酷工作---高级数据工程师(公司靠谱,技术强悍,产品牛叉,福利有干货) 关键词:7000万用户、五星级厨师、住房补助 - V2EX
年度酷工作---高级数据工程师(公司靠谱,技术强悍,产品牛叉,福利有干货) 关键词:7000万用户.五星级厨师.住房补助 - V2EX 年度酷工作---高级数据工程师(公司靠谱,技术强悍,产品牛叉,福 ...