注:在这里数据库对象等同于数据库连接对象,也就是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数据库连接的几个重要函数的使用及注意事项(原创)的更多相关文章

  1. 关于qt中的tr()函数

    关于qt中的tr()函数 在论坛中漂,经常遇到有人遇到tr相关的问题.用tr的有两类人: (1)因为发现中文老出问题,然后搜索,发现很多人用tr,于是他也开始用tr (2)另一类人,确实是出于国际化的 ...

  2. 从零开始攻略PHP(6)——代码重用与函数编写的一些注意事项

    一个新的项目是这样创建的:它将已有的可重新利用的组件进行组合,并将新的开发难度降低到最小. 代码重用的好处:降低成本.提升可靠性和一致性. 1.使用require()和include()函数 使用一条 ...

  3. PHP学习(6)——代码重用与函数编写的一些注意事项

    一个新的项目是这样创建的:它将已有的可重新利用的组件进行组合,并将新的开发难度降低到最小. 代码重用的好处:降低成本.提升可靠性和一致性. 1.使用require()和include()函数 使用一条 ...

  4. Qt调用dll中的功能函数

    声明: 事先我已经自己动手写了一个简单的dll文件(myDLL.dll),C版接口的.并且用我前两篇有关DLL文章里面的方法,从dll中导出了导入库(.lib)文件,dll中有两个函数,原型如下:   ...

  5. QT paintevent 事件, update()槽函数

    一界面重载函数 使用方法: 1在头文件里定义函数 protected: void paintEvent(QPaintEvent *event); 2 在CPP内直接重载 void ---------- ...

  6. Qt之自定义信号和槽函数

    自定义信号和槽函数: 1.类的声明和实现分别放在.h和.cpp文件中: 2.类声明包含Q_OBJECT宏: 3.信号只要声明不要设计其的实现函数 4.发射信号用emit关键字 5.自定义槽的实现与普通 ...

  7. Qt直接使用OpenSSL里的函数

    简述 OpenSSL是一个强大的安全套接字层密码库,囊括主要的密码算法.常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用. 简述 下载安装 使用 更多参考 下载安装 ...

  8. 3.QT中的debug相关的函数,以及文件锁的使用

     1  新建项目T33Debug main.cpp #include <QDebug> #include <QFile> #include <QMutex>   ...

  9. QT学习笔记7:C++函数默认参数

    C++中允许为函数提供默认参数,又名缺省参数. 使用默认参数时的注意事项: ① 有函数声明(原型)时,默认参数可以放在函数声明或者定义中,但只能放在二者之一.建议放在函数声明中. double sqr ...

随机推荐

  1. HTML5 程序设计 - 使用HTML5 Canvas API

    请你跟着本篇示例代码实现每个示例,30分钟后,你会高喊:“HTML5 Canvas?!在哥面前,那都不是事儿!” 呵呵.不要被滚动条吓到,很多都是代码和图片.我没有分开写,不过上面给大家提供了目录,方 ...

  2. 在jexus下如何简单的配置多站点

    参考:linuxdot.net 其实jexus的配置还是比较简单的,目录即站点(一个目录就是一个站点,一个配置文件就是一个站点) 如uustudy.net,在siteconf目录下创建一个uustud ...

  3. Linux+apache+mono+asp.net安装教程

    Linux+apache+mono+asp.net安装教程(CentOS上测试的) 一.准备工作: 1.安装linux系统(CentOS,这个就不多讲了) 2.下载所需软件 http-2.4.4.ta ...

  4. 为什么房间的 Wi-Fi 信号这么差

    最近把家里主卧整成了个小影院,由于之前房子装修时网线端口与电源插口布置太少,导致家庭网络架设变得麻烦起来,最后终于通过「无线中继」技术达到了全屋满格 Wi-Fi 的效果. 在 Wi-Fi 架设过程中, ...

  5. 用Go实现的简易TCP通信框架

    接触到GO之后,GO的网络支持非常令人喜欢.GO实现了在语法层面上可以保持同步语义,但是却又没有牺牲太多性能,底层一样使用了IO路径复用,比如在LINUX下用了EPOLL,在WINDOWS下用了IOC ...

  6. Git入门资料汇总

    Git是一个非常好用的版本控制工具,同时,它也是一个相对比较复杂的工具,想要掌握它还是需要花一番功夫的.网络上关于Git的入门资料已经很多了,我就不再重复了,直接把我学习的文章放在这里. Git详解 ...

  7. Android开发学习之路-使用annotationProcessor配置Butterknife

    Apt工具的作者宣布了不再维护该工具了,而且Android Studio也有了自己的插件,并且可以通过gradle来简单的配置. 其实用Butterknife的都知道,没有apt,onClick绑定不 ...

  8. atitit 商业项目常用模块技术知识点 v3 qc29

    atitit 商业项目常用模块技术知识点 v3 qc29 条码二维码barcodebarcode 条码二维码qrcodeqrcode 条码二维码dm码生成与识别 条码二维码pdf147码 条码二维码z ...

  9. Atitit 硬件 软件 的开源工作 差异对比

    Atitit 硬件 软件 的开源工作 差异对比 1.1. 模块化,标准化,以及修改的便捷性1 1.2. 生产和发布成本 1 1.3.   3. 入行门槛搞2 1.4.  在软件业极度发达的今天,任何具 ...

  10. 利用Docker技术实现UDP广播效果(网络编程python版)

    docker的安装见官方文档 我使用的系统为Ubuntu16.04 Ubuntu系统安装docker文档地址:https://docs.docker.com/engine/installation/l ...