QT数据库连接的几个重要函数的使用及注意事项(原创)
注:在这里数据库对象等同于数据库连接对象,也就是QSqlDatabase类的对象
QSqlDatabase QSqlDatabase::addDatabase((const QString & type, const QString & connectionName = QLatin1String( defaultConnection )
功能:将某种类型的数据库加入到数据库连接列表中,可指定连接名,如果没有指定,将使用缺省的数据库连接名;返回数据库连接
参数:type——数据库类型,如QDB2 QSQLITE QODBC等等
connectionName ——连接名,由用户自定义,如果该连接名已经存在,那么新的连接会代替原有的连接,即旧的连接将被删除。
注:连接名不同于数据库名,两者一定要区分开;连接在不指定连接名时会使用默认连接名,而默认连接只能存在一个,如果下一个连接也未指定连接名,那么上一个连接将被下一个连接代替,将不能实现多连接,所以为了实现多连接,最好为每个连接自定义连接名!!!!
例:QSqlDatabase db=QSqlDatabase::addDatabase(“QODBC”,"OTHER");
QPSQL为数据库类型,OTHER为连接名。
void QSqlDatabase::setDatabaseName ( const QString & name )
功能:设置数据库名,数据库名必须在数据库连接打开前被设置。
参数:name——数据库名,即数据库文件名,可传递给该参数绝对路径,也可只传递文件名(将会有一条缺省路径),但后者要求将文件放到指定位置;
注:QODBC数据库较为特殊,请看例子
例:
设置QODBC数据库名实例
db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=myaccessfile.mdb");
QSqlDatabase QSqlDatabase::database ( const QString & connectionName = QLatin1String( defaultConnection ), bool open = true ) [static]
功能:通过连接名返回数据库连接对象,这个数据库连接对象必须在之前被加入到了数据库连接列表中(通过addDatabase函数加入),并且可根据open标志及数据库状态决定是否打开数据库。
参数:connectionName ——数据库连接名
open——标志用户是否需要打开数据库
void QSqlDatabase::removeDatabase ( const QString & connectionName ) [static]
功能:根据提供的连接名从数据库连接列表中移除数据库连接;
参数:connectionName ——数据库连接名
注:使用该函数容易出错,只有在某连接下没有绑定查询对象时,才能将其删除,如果有其他指向该数据库连接对象的指针,需要在关闭该连接后将该指针释放。
例:
// WRONG
QSqlDatabase db = QSqlDatabase::database("sales");
QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db);
QSqlDatabase::removeDatabase("sales"); // will output a warning
// "db" is now a dangling invalid database connection,
// "query" contains an invalid result set
The correct way to do it:
{
QSqlDatabase db = QSqlDatabase::database("sales");
QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db);
}
// Both "db" and "query" are destroyed because they are out of scope
QSqlDatabase::removeDatabase("sales"); // correct
QSqlQuery::QSqlQuery(const QString & query = QString(), QSqlDatabase db = QSqlDatabase())
功能:根据SQL查询语句及数据库对象创建一个QSqlQuery 对象,我们可指定数据库对象,如未指定,则使用缺省对象;
参数:query ——查询语句
db ——数据库对象
注:在某些情况下,要为QSqlQuery对象指定明确的数据库连接,否则执行查询时会出现”QSqlQuery::exec: database not open“错误提示
例如,如果我们为数据库对象自定义了数据库连接名(connectionName),并且建立了连接,那么使用QSqlQuery创建对象时要为该对象指定数据库对象,否则就会访问缺省对象了,进而会出现“database not open”错误提示。
正确使用示例:
QSqlDatabase db = QSqlDatabase::addDatabase("QSLITE",connectionName);//connectionName为数据库连接名
db.setDatabaseName(fileName);
if (!db.open()) {
QMessageBox::warning(, QObject::tr("Database Error"),
db.lastError().text());
return false;
}
QSqlDatabase db = QSqlDatabase::database(connectionName);//根据连接名获取数据库对象
QSqlQuery query(db);//为QSqlQuery对象指定数据库对象
QT数据库连接的几个重要函数的使用及注意事项(原创)的更多相关文章
- 关于qt中的tr()函数
关于qt中的tr()函数 在论坛中漂,经常遇到有人遇到tr相关的问题.用tr的有两类人: (1)因为发现中文老出问题,然后搜索,发现很多人用tr,于是他也开始用tr (2)另一类人,确实是出于国际化的 ...
- 从零开始攻略PHP(6)——代码重用与函数编写的一些注意事项
一个新的项目是这样创建的:它将已有的可重新利用的组件进行组合,并将新的开发难度降低到最小. 代码重用的好处:降低成本.提升可靠性和一致性. 1.使用require()和include()函数 使用一条 ...
- PHP学习(6)——代码重用与函数编写的一些注意事项
一个新的项目是这样创建的:它将已有的可重新利用的组件进行组合,并将新的开发难度降低到最小. 代码重用的好处:降低成本.提升可靠性和一致性. 1.使用require()和include()函数 使用一条 ...
- Qt调用dll中的功能函数
声明: 事先我已经自己动手写了一个简单的dll文件(myDLL.dll),C版接口的.并且用我前两篇有关DLL文章里面的方法,从dll中导出了导入库(.lib)文件,dll中有两个函数,原型如下: ...
- QT paintevent 事件, update()槽函数
一界面重载函数 使用方法: 1在头文件里定义函数 protected: void paintEvent(QPaintEvent *event); 2 在CPP内直接重载 void ---------- ...
- Qt之自定义信号和槽函数
自定义信号和槽函数: 1.类的声明和实现分别放在.h和.cpp文件中: 2.类声明包含Q_OBJECT宏: 3.信号只要声明不要设计其的实现函数 4.发射信号用emit关键字 5.自定义槽的实现与普通 ...
- Qt直接使用OpenSSL里的函数
简述 OpenSSL是一个强大的安全套接字层密码库,囊括主要的密码算法.常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用. 简述 下载安装 使用 更多参考 下载安装 ...
- 3.QT中的debug相关的函数,以及文件锁的使用
1 新建项目T33Debug main.cpp #include <QDebug> #include <QFile> #include <QMutex> ...
- QT学习笔记7:C++函数默认参数
C++中允许为函数提供默认参数,又名缺省参数. 使用默认参数时的注意事项: ① 有函数声明(原型)时,默认参数可以放在函数声明或者定义中,但只能放在二者之一.建议放在函数声明中. double sqr ...
随机推荐
- SAP CRM 将组件整合至导航栏中
到现在,我们已经可以让组件独立地显示.我们只是运行它.让它显示在Web UI中.让我们把组件整合进导航栏,使我们可以在正常登录Web UI时访问它. 步骤一: 为你的UI组件主窗体创建一个内向插件. ...
- iOS 小知识点(持续更新)
1.如何通过代码设置Button title的字体大小 设置Button.titleLabel.font = [UIFont systemFontOfSize:<#(CGFloat)#> ...
- 【干货分享】流程DEMO-外出申请
流程名: 外出申请 流程相关文件: 流程包.xml 流程说明: 直接导入流程包文件,即可使用本流程 表单: 流程: 图片:2.png DEMO包下载: http://files.cnblog ...
- SSIS 包部署 Package Store 后,在 IS 中可以执行,AGENT 执行却报错
可以执行 SSIS Package ,证明用 SSIS Package 的账户是可以执行成功的.SQL Server Agent 默认指定账号是 Network Service. 那么可以尝试一下将 ...
- 聊聊从web session的共享到可扩展缓存设计
先从web session的共享说起 许多系统需要提供7*24小时服务,这类系统肯定需要考虑灾备问题,单台服务器如果宕机可能无法立马恢复使用,这必定影响到服务.这个问题对于系统规模来说,从小到大可 ...
- 使用Metrics.NET 构建 ASP.NET MVC 应用程序的性能指标
通常我们需要监测ASP.NET MVC 或 Web API 的应用程序的性能时,通常采用的是自定义性能计数器,性能计数器会引发无休止的运维问题(损坏的计数器.权限问题等).这篇文章向你介绍一个新的替代 ...
- Oracle11g CentOS7安装记录
1. 操作系统环境.安装包准备 宿主机:Max OSX 10.10.5 虚拟机:Parallel Desktop 10.1.1 虚拟机操作系统:CentOS-7-x86_64-DVD-1511.iso ...
- Java基础知识(壹)
写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...
- C#,.Net 学习资源
原文:http://blog.csdn.net/chinacsharper/article/details/17514923一.网站1.http://msdn.microsoft.com/zh-CN/ ...
- 解析大型.NET ERP系统 单据标准(新增,修改,删除,复制,打印)功能程序设计
ERP系统的单据具备标准的功能,这里的单据可翻译为Bill,Document,Entry,具备相似的工具条操作界面.通过设计可复用的基类,子类只需要继承基类窗体即可完成单据功能的程序设计.先看标准的销 ...