要使用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)- 连接到数据库的更多相关文章

  1. robot framework学习笔记之七—连接mysql数据库

    1.安装Database-Library 输入命令:pip install robotframework_databaselibrary 2.添加Database的Library     3.实例 * ...

  2. openresty 学习笔记四:连接mysql和进行相关操作

    openresty 学习笔记四:连接mysql和进行相关操作 毕竟redis是作为缓存,供程序的快速读写,虽然reidis也可以做持久化保存,但还是需要一个做数据存储的数据库.比如首次查询数据在red ...

  3. openresty 学习笔记三:连接redis和进行相关操作

    openresty 学习笔记三:连接redis和进行相关操作 openresty 因其非阻塞的调用,令服务器拥有高性能高并发,当涉及到数据库操作时,更应该选择有高速读写速度的redis进行数据处理.避 ...

  4. golang学习笔记16 beego orm 数据库操作

    golang学习笔记16 beego orm 数据库操作 beego ORM 是一个强大的 Go 语言 ORM 框架.她的灵感主要来自 Django ORM 和 SQLAlchemy. 目前该框架仍处 ...

  5. MySQL学习(一)——Java连接MySql数据库

    MySQL学习(一)——Java连接MySql数据库 API详解: 获得语句执行 String sql = "Insert into category(cid, cname) values( ...

  6. SQL server2005学习笔记(一)数据库的基本知识、基本操作(分离、脱机、收缩、备份、还原、附加)和基本语法

    在软件测试中,数据库是必备知识,假期闲里偷忙,整理了一点学习笔记,共同探讨. 阅读目录 基本知识 数据库发展史 数据库名词 SQL组成 基本操作 登录数据库操作 数据库远程连接操作 数据库分离操作 数 ...

  7. Android学习笔记(十七)——数据库操作(下)

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 这一次我们来试一试升级数据库,并进行数据库的CRUD操作,其中, C 代表添加(Create) ,R 代表查询 ...

  8. Django 学习笔记(七)数据库基本操作(增查改删)

    一.前期准备工作,创建数据库以及数据表,详情点击<Django 学习笔记(六)MySQL配置> 1.创建一个项目 2.创建一个应用 3.更改settings.py 4.更改models.p ...

  9. MongoDB学习笔记——MongoDB 连接配置

    MongoDB连接标准格式: mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[dat ...

随机推荐

  1. Codeforces Round #323 (Div. 1) B. Once Again... 暴力

    B. Once Again... Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/582/probl ...

  2. 让DataGridView显示行号

          http://www.cnblogs.com/JuneZhang/archive/2011/11/21/2257630.html 为了表示行号,我们可以在DataGridView的RowP ...

  3. 基于新浪sae使用php生成图片发布图文微博

    1.生成图片的代码: <?php header ("Content-type: image/png"); mb_internal_encoding("UTF-8&q ...

  4. a标签中关于javascript:void(0)的几个问题

    最近看了好几个关于<a>标签和javascript:void(0)的帖子,谨记于此,以资查阅.注:以下代码未经全面测试,但每一种方法可能会出现的情况都基本做了说明. 在做页面时,如果想做一 ...

  5. 使用apache common-io 监控文件变化--转

    package common.io; import org.apache.commons.io.filefilter.FileFilterUtils; import org.apache.common ...

  6. 深入理解计算机系统第二版习题解答CSAPP 2.13

    从20世纪70年代末到80年代末,Digital Equipment的VAX计算机是一种非常流行的机型.它没有布尔运算AND和OR指令,只有bis(位设置)和bic(位清除)这两种指令.两种指令的输入 ...

  7. Javascript学习总结三(Array对象的用法)

    javascript Array对象的常用API 1:concat concat() 方法用于连接两个或多个数组.该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本.举例:var a1 = [ ...

  8. 函数textread

    函数textread可以按列读取ascii 文件中的元素,每一列中可能含有不同的数据类型.这函数读取其他程序生成的数据表时非常地有用. 实际应用中也要经常要读取txt文件,这个时候就需要用到强大的te ...

  9. JavaScript高级程序设计(第三版)学习笔记8、9、10章

    第8章,BOM BOM的核心对象是window,具有双重角色,既是js访问浏览器的一个接口,又是ECMAScript规定的Global对象.因此,在全局作用域中声明的函数.变量都会变成window对象 ...

  10. 20160512--hibernate--缓存

    缓存 缓存的作用主要用来提高性能,可以简单的理解成一个Map:使用缓存涉及到三个操作:把数据放入缓存.从缓存中获取数据.删除缓存中的无效数据.   原理模拟分析:(不能运行,只是模拟)(缓存实现复杂, ...