注:在这里数据库对象等同于数据库连接对象,也就是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 ...
随机推荐
-
在本地调试移动设备上的页面——神器weinre介绍
平时写代码,最喜欢用chrome的developer Tool调试页面了,基本是离不了的工具.但是当页面需要在移动设备上使用,尤其是被嵌入到Hybird APP中时,由于移动版的chrome没有dev ...
-
【代码笔记】iOS-和当前时间比较
代码: #import "RootViewController.h" @interface RootViewController () @end @implementation R ...
-
uva 1151(最小生成树,枚举子集)
题意:平面上有n个点(1<=N<=1000),你的任务是让所有n个点连通,为此,你可以新建一些边,费用等于两个端点的欧几里得距离的平方.另外还有q(0<=q<=8)个套餐,可以 ...
-
json_decode时含有中文是解码问题(json_decode返回为null)
function myDecode($str){ $str = substr(str_replace('\"','"',json_encode($str)),1,-1); retu ...
-
php大力力 [003节]php在百度文库的几个基础教程mac环境下文本编辑工具
2015-08-22 php大力力003.mac环境下文本编辑工具 在windows下,使用notepad特别多.在mac下使用“备忘录”app,word,反而没有存储过txt后缀等不同文本. mac ...
-
(转载)Linux一句话精彩
(转载)http://bjsfly.blog.163.com/blog/static/161276642007845228371/ 0001[url=111]111[/url] [ 本帖最后由 bjc ...
-
bzoj1053
不难发现,要让约数尽可能多,那么素因子越小的的指数一定越大可能的素因数的种类也不超过10种然后直接暴搜即可 ..] ,,,,,,,,,); var n,ant,ans:int64; procedure ...
-
nexus4/5/6/7/9/10设备谷歌安卓5.1.1系统底包下载
https://developers.google.com/android/nexus/images http://www.inexus.co/thread-18488-1-1.html
-
poj 2441 Arrange the Bulls(状态压缩dp)
Description Farmer Johnson's Bulls love playing basketball very much. But none of them would like to ...
-
非黑即白--谷歌OCR光学字符识别
# coding=utf-8 #非黑即白--谷歌OCR光学字符识别 # 颜色的世界里,非黑即白.computer表示深信不疑. # 今天研究一下OCR光学识别庞大领域中的众多分支里的一个开源项目的一个 ...