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 ...
随机推荐
- 继续推广我的新博客xysay:http://www.xysay.com/
RT 博客收拾了一下,准备以后就在那里记录论文笔记啦,求交流,求推荐,求友链~~~ http://www.xysay.com/
- POJ_1365_Prime_Land
//懒得解释 #include <iostream> #include <cstring> #include <cmath> #include <cstdio ...
- #pragma warning 启用和禁用warning
开发人员可以使用 #pragma 指令将警告作为错误处理:还可以启用或禁用警告,如下面的示例所示: 1.将一个warning作为一个错误 #pragma warning (error: 6260) 2 ...
- [Effective C++ --016]成对使用New和Delete时要采用相同形式
这一节比较简单,可以总结为以下: std::string *stringPtr1 = new std::string; std::]; .. delete stringPtr1; // delete ...
- [006]为什么C++会被叫做是C++?
先了解一下自增和自减的运算符: 自增(++)和自减(--)操作符为对象提供加1或减1操作: int i = 0, j; j = ++i; // j = 1, i = 1: prefix yields ...
- Ruby简介,附带示例程序
Ruby语言是日本人松本行弘于1993年器开始着手研发,经历2年时间,发布了Ruby语言的第一个版本:0.95版. Ruby是一种非常简介的解释性语言,一种纯粹的面向对象编程语言,甚至比Jav ...
- 查看MAC系统JRE和JDK版本
经常有些软件有JRE或者JDK的版本要求,但怎么查询MAC上现在的JRE或JDK的版本呢?很简单,用这两个命令 这个是查询JRE的版本: $ java -version java version &q ...
- 使用RecyclerView实现瀑布流的效果
主函数: public class MainActivity extends AppCompatActivity { private RecyclerView recyclerView; privat ...
- html select用法总结
本文将介绍select 原生的常用方法,这些都是经过测试,兼容ie6到ie10,及chrome,火狐等,也就是说大部分浏览器都兼容.如果大家发现有不兼容的情况,可以跟我留言. 我们对基本的用法了如指掌 ...
- PHP在ubuntu中编译安装
关于怎么获取php源码和解压就不再说了. 编译的参数为: ./configure --prefix=/opt/php --with-bz2 --with-mcrypt --with-mhash --w ...