QtSQL学习笔记(2)- 连接到数据库
要使用QSqlQuery或者QSqlQueryModel访问一个数据库,首先需要创建并打开一个或多个数据库连接(database connections)。
一般地,数据库连接是根据连接名(connection name)来识别的,而不是依靠数据库名称。你可以建立多个连接,但连接到同一个数据库。QSqlDatabase还支持一个默认连接(default connection)的概念,这是一个未命名的连接。当调用QSqlQuery或者QSqlQueryModel中需要指定一个连接名参数的成员函数时,如果你不传递一个连接名,那么就会使用默认连接。当你的应用中仅需要使用一个数据库连接时,创建一个默认连接会非常方便。
注意创建一个连接和打开一个连接之间的区别。创建一个连接包括创建一个QSqlDatabase类实例。这打开连接之前,这个连接是不可用的。下面的代码片段展示了如何创建一个默认连接并打开它:
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("bigblue");
db.setDatabaseName("flightdb");
db.setUserName("acarlson");
db.setPassword("1uTbSbAs");
bool ok = db.open();
第一行代码创建一个连接对象,而最后一行打开这个连接以备后面使用。而中间的代码,我们用来初始化一些连接信息,包括主机名、数据库名、用户名和密码。在这种情况下,我们正连接到主机名为bigblue的数据库名为flightdb的MYSQL数据库。QSqlDatabase::addDatabase()方法的参数“QMYSQL”用来指定用于连接的数据库驱动类型。
注意:如果第一次使用MYSQL,你可能会遇到如下所示的错误提示:
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
按理说,我使用的是Qt 5.4.1,这个版本已经提供了MYSQL的驱动了,但是这里却出现了驱动不能加载的情况。在网上查阅资料,绝大多数人给出的解决方案是将MySQL安装目录下的libmysql.dll文件放到C:\Qt\Qt5.4.1\5.4\mingw491_32\bin目录下即可解决。但是,本人尝试,并非任意版本的此动态链接库文件都能解决此问题,比如本人在官网下载安装的最新版MYSQL中的此文件就不能解决问题,可能还跟本人使用的Qt是基于MinGW编译器,而有些是使用VS编译的有关。这里我提供一个我的平台上可用的一个文件,连接地址如下:http://pan.baidu.com/s/1sjM9x2t
以上代码片段中创建的连接是一个默认连接,因为我们没有为addDatabase()方法传递第二个参数,用以指定一个连接名。例如,下面的代码我们就建立了两个MYSQL数据库连接,并且分别命名为“first”和“second”:
QSqlDatabase firstDB = QSqlDatabase::addDatabase("QMYSQL", "first");
QSqlDatabase secondDB = QSqlDatabase::addDatabase("QMYSQL", "second");
在这些连接被初始化以后,分别对每一个连接调用open()方法来激活连接。如果open()失败,该方法将返回false。在这种情况下,可以调用QSqlDatabase::lastError()方法来获取错误信息,该方法将返回一个QSqlError对象,可以使用QSqlError::databaseText()方法来得到该错误的QString表示形式的信息。
一旦一个连接被建立,我们可以在任何地方通过调用带有一个连接名参数的静态函数QSqlDatabase::database()来获取一个指向该连接的指针,如果我们不传递一个连接名,它将返回默认连接。例如:
QSqlDatabase defaultDB = QSqlDatabase::database();
QSqlDatabase firstDB = QSqlDatabase::database("first");
QSqlDatabase secondDB = QSqlDatabase::database("second");
要移除一个数据库连接,首先使用QSqlDatabase::close()关闭数据库,然后使用静态方法QSqlDatabase::removeDatabase()移除它。
QtSQL学习笔记(2)- 连接到数据库的更多相关文章
- robot framework学习笔记之七—连接mysql数据库
1.安装Database-Library 输入命令:pip install robotframework_databaselibrary 2.添加Database的Library 3.实例 * ...
- openresty 学习笔记四:连接mysql和进行相关操作
openresty 学习笔记四:连接mysql和进行相关操作 毕竟redis是作为缓存,供程序的快速读写,虽然reidis也可以做持久化保存,但还是需要一个做数据存储的数据库.比如首次查询数据在red ...
- openresty 学习笔记三:连接redis和进行相关操作
openresty 学习笔记三:连接redis和进行相关操作 openresty 因其非阻塞的调用,令服务器拥有高性能高并发,当涉及到数据库操作时,更应该选择有高速读写速度的redis进行数据处理.避 ...
- golang学习笔记16 beego orm 数据库操作
golang学习笔记16 beego orm 数据库操作 beego ORM 是一个强大的 Go 语言 ORM 框架.她的灵感主要来自 Django ORM 和 SQLAlchemy. 目前该框架仍处 ...
- MySQL学习(一)——Java连接MySql数据库
MySQL学习(一)——Java连接MySql数据库 API详解: 获得语句执行 String sql = "Insert into category(cid, cname) values( ...
- SQL server2005学习笔记(一)数据库的基本知识、基本操作(分离、脱机、收缩、备份、还原、附加)和基本语法
在软件测试中,数据库是必备知识,假期闲里偷忙,整理了一点学习笔记,共同探讨. 阅读目录 基本知识 数据库发展史 数据库名词 SQL组成 基本操作 登录数据库操作 数据库远程连接操作 数据库分离操作 数 ...
- Android学习笔记(十七)——数据库操作(下)
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 这一次我们来试一试升级数据库,并进行数据库的CRUD操作,其中, C 代表添加(Create) ,R 代表查询 ...
- Django 学习笔记(七)数据库基本操作(增查改删)
一.前期准备工作,创建数据库以及数据表,详情点击<Django 学习笔记(六)MySQL配置> 1.创建一个项目 2.创建一个应用 3.更改settings.py 4.更改models.p ...
- MongoDB学习笔记——MongoDB 连接配置
MongoDB连接标准格式: mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[dat ...
随机推荐
- iOS开发——高级技术&支付宝功能的实现
支付宝功能的实现 现在不少app内都集成了支付宝功能 使用支付宝进行一个完整的支付功能,大致有以下步骤: 1>先与支付宝签约,获得商户ID(partner)和账号ID(seller) (这个 ...
- java_利用session校验图片认证码
RegisterServlet:检验server,client验证码是否一致 ImageServlet: 产生验证码 <!DOCTYPE html> <html> <he ...
- Android 自定义View修炼-高仿猎豹清理大师自定义内存开口圆环比例进度View
一.概述 看见猎豹清理大师的内存开口圆环比例进度 挺有意思的,于是就是想自己实现下这样的效果,于是反编译了猎豹清理 大师的app看了下,原来是有两张图,于是脑子里就过了下思路,利用上下两张图,旋转上面 ...
- Hibernate学习笔记--------4.查询
一.Get/Load Get方法是立即检索,而load是延迟检索,他们都是根据主键进行查询.在<class>标签中,若把lazy属性改为false,load方法就会立即检索,class中的 ...
- 记一次大量 TCP 连接失败
背景 在一段没有日志的历史遗留代码上面加入监控部署后不久,就收到了服务调用成功率低的告警,真是哗了狗了 解决过程 client端在线上单机部署,根据监控上面的返回码比例看出失败原因都是链接失败,通过 ...
- 常用CentOS 6/7 扩展源
1.系统自带 baseextrasupdates 2.epel yum install epel-release https://fedoraproject.org/wiki/EPEL 3.el(用于 ...
- deepin linux安装与配置
作者:相思羽 出处:http://www.cnblogs.com/xiang-siyu 欢迎转载,也请保留这段声明.谢谢! deepin linux是由深度开发的操作系统,基于debian,内置了搜 ...
- Spring Boot 获取ApplicationContext
package com.demo; import org.springframework.beans.BeansException; import org.springframework.contex ...
- css动画——transition和animation
http://www.ruanyifeng.com/blog/2014/02/css_transition_and_animation.html 第一部分:CSS Transition 在CSS 3引 ...
- 关于SpringAOP的XML方式的配置
AOP(XML)[理解][应用][重点] 1.AOP基础实例 A.导入jar包 核心包(4个) 日志(2个) AOP(4个) Spring进行AOP开发(1个) ...