数据库链接相关介绍:
- 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)
QSqlQuery query(base);
QSqlQuery query;
如果只有一个数据库链接,则其对象构造函数不需要参数,这个query对象直接和默认数据库链接挂钩。
若是有多个链接,就要用第一种来指定要操作的数据库链接。
- 错误信息1:
QSqlQuery::exec: database not open
明明调用open函数了,怎么会not open?原因如下:
base = QSqlDatabase::addDatabase("QSQLITE",tr("abc")); //这里指定数据库链接名称为abc
而定义query对象时,QSqlQuery query(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对象的定义变成了
QSqlQuery query; //这里没有指定query要操作的数据库
(2)这里使用的base.lastError().text()函数,把base换成query就是具体的错误信息了。
以上QSqlQuery 对象出现的问题,也适用于QSqlQueryModel。
注意QSqlQueryModel的setQuery函数第二个参数
以上文字中从“错误信息1”开始,颜色就不正常了,“删除格式”、“字体颜色”设置也不好用,凑合看吧。