数据库链接相关介绍:

QSqlDatabase类的一个对象,代表一个数据库链接,这个链接与某个物理.db文件相连接。

一个.db文件可以与多个数据库链接相连,即能与多个QSqlDatabase类对象相连

连接.db文件和数据库链接的函数:setDatabaseName(tr("database.db"));

这里的参数 database.db 就是要连接的.db文件的路径,对,是路径+文件名。默认路径为当前路径,一般在build。。。debug或release文件夹中。

这个函数属于QSqlDatabase类

不同的链接用链接名称(connectionName)来区分,这个connectionName是创建数据库链接的函数的第二个参数。

创建数据库链接的函数:

base=QSqlDatabase::addDatabase("QSQLITE",tr("abc"));

base=QSqlDatabase::addDatabase("QSQLITE");

第一个函数中,我提供了参数:链接名称。

第二个函数中没有提供,因为它有默认值:"qt_sql_default_connection"

如果只有一个数据库链接,一般使用第二种,不指定链接名称。

要对数据库进行操作经常会用到QSqlQuery类,其对象定义有两种:(编号算法好烂,这里该是8)

QSqlQueryquery(base);

QSqlQueryquery;

如果只有一个数据库链接,则其对象构造函数不需要参数,这个query对象直接和默认数据库链接挂钩。

若是有多个链接,就要用第一种来指定要操作的数据库链接。

错误信息1:

QSqlQuery::exec: database not open

明明调用open函数了,怎么会not open?原因如下:

base=QSqlDatabase::addDatabase("QSQLITE",tr("abc"));   //这里指定数据库链接名称为abc

而定义query对象时,QSqlQueryquery(base);//虽然已指定query操作的数据库链接

但还是出现以上错误,说明两个可能:

(1)base没有正确的调用open函数;

查询后发现open没有参数可指定,所以如果是这个原因,我没有解决办法。

(2)第一个链接直接使用默认链接,不能指定名称。

这是个强制的条件,之后又创建新的链接对象时,再指定名称,用来与默认名称相区分。

错误信息2:

"append data failed:" "Driver not loaded Driver not loaded"

QSqlQuery::exec: database not open

这次在not open基础上,连驱动都出问题了,但不要被吓到。这只是代码中几个字符修改的后果。

这次的链接名称依然是abc。

(1)但query对象的定义变成了

QSqlQueryquery;        //这里没有指定query要操作的数据库

(2)这里使用的base.lastError().text()函数,把base换成query就是具体的错误信息了。

以上QSqlQuery对象出现的问题,也适用于QSqlQueryModel。

注意QSqlQueryModel的setQuery函数第二个参数

以上文字中从“错误信息1”开始,颜色就不正常了,“删除格式”、“字体颜色”设置也不好用,凑合看吧。

原文:http://my.oschina.net/NewMoon/blog/493544

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐