要使用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. 时间紧迫,写一些 NavigationController 一次性返回2级界面甚至更多级的界面

    在NavigationController中,调用pushViewController可以将界面推到指定的界面,调用popToViewController可以返回上层界面,可是它的实现原理是什么? 好 ...

  2. python会什么比c慢

    众所周知,python执行速度比c慢.原因为何? 先来看下面这张图: python的传统运行执行模式:录入的源代码转换为字节码,之后字节码在python虚拟机中运行.代码自动被编译,之后再解释成机器码 ...

  3. cocos 3.0 一键打包android平台应该注意的细节

    cocos2d-x 移植越来越便捷,走到cocos2d-x-3.0rc2,能够说移植已经非常完好了,我们仅仅要进行适当的适配,cocos能够直接帮助我们生成apk 我网络不好无法上传图片:(无图无捷豹 ...

  4. mysql 高可用方案漫谈(一) 转阿里云

    https://yq.aliyun.com/articles/2237?spm=5176.blog2238.yqblogcon1.7.e5fyEy#index_section

  5. 学习笔记之Lucene

    http://baike.baidu.com/view/371811.htm?fr=aladdin Apache Lucene(http://lucene.apache.org/) Java 全文搜索 ...

  6. Android 导入导出CSV,xls文件 .

    1 . http://www.bangchui.org/read.php?tid=62 2 .http://blog.csdn.net/xinzheng_wang/article/details/77 ...

  7. 不同linux系统添加开机启动程序的命令

    see http://phpcj.org/blog/%E4%B8%8D%E5%90%8Clinux%E7%B3%BB%E7%BB%9F%E6%B7%BB%E5%8A%A0%E5%BC%80%E6%9C ...

  8. java_泛型方法使用实例

    //提供两种使用情况,第二种情况定义前者是后者的子类-类型通配方式 package ming; import java.util.ArrayList; import java.util.Collect ...

  9. Android 换肤功能的实现(Apk插件方式)

    一.概述 由于Android 没有提供一套统一的换肤机制,我猜可能是因为国外更注重功能和体验的原因 所以国内如果要做一个漂亮的换肤方案,需要自己去实现. 目前换肤的方法大概有三种方案: (1)把皮肤资 ...

  10. java中public等权限问题和final的使用

    1.public:public表明该数据成员.成员函数是对所有用户开放的,所有用户都可以直接进行调用 2.private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直 ...