为什么以下代码打印为true而不是false?
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
if (!openDatabase()) return 1;
// false means don't open closed connections.
QSqlDatabase db2 = QSqlDatabase::database("foo", false);
qDebug() << db2.isOpen();
return 0;
}
bool openDatabase()
{
QSqlDatabase db1 = QSqlDatabase::addDatabase("QPSQL", "foo");
db1.setHostName("localhost");
db1.setUserName("user");
db1.setPassword("password");
db1.setDatabaseName("bar");
return db1.open();
}
根据What is the correct way of QSqlDatabase & QSqlQuery?第一个答案中的示例#2,当QSqlDatabase
对象超出范围时,数据库连接将关闭。因此,当db1
超出openDatabase()
末尾的范围时,应该关闭连接。
(实际发生的事情有点微妙。在内部,QSqlDatabase
维护它为特定连接返回的QSqlDatabase
个对象的引用计数。引用计数递减{{1}并且,当它达到0时,连接被关闭。但是,这不应该改变任何东西。引用计数应该是~QSqlDatabase
中第一行之后的1和函数结束后的0并且db1被销毁。)< / p>
我错过了什么?
答案 0 :(得分:1)
根据QTBUG-17140,您是对的,尽管错误中的情况略有不同,但问题仍然很普遍,因为执行>>> def f():
... print("inside f")
...
>>> print(f())
inside f
None
时存在问题如果数据库连接处于活动状态,则报告直到Qt 5.3.1,错误报告未显示它已解决。