【发布时间】:2016-02-09 16:38:31
【问题描述】:
我最近开始使用 c++ QT。 我创建了类“ControllerOfDB”来保存指向我的 QSqlDatabase 和几个函数(进行插入/选择)的指针。 示例选择函数:
QList<data1> GetData1()
{
QList<data1> output;
if(!dataBase->isOpen())
dataBase->open();
if(dataBase->isOpen())
{
QSqlQuery* query = new QSqlQuery(*dataBase);
query->prepare("SELECT * FROM table1");
if(query->exec())
while (query->next())
{
output.append( *(new data1(
query->value(0).toInt(),
query->value(1).toString(),
query->value(2).toInt(),
query->value(3).toInt(),
query->value(4).toInt(),
)) );
}
query->clear();
query->finish();
delete query;
}
return output;
}
一切正常,直到我不得不增加更改数据库或以不同用户身份登录的可能性。我修改了连接和断开功能。经过几次迭代,这就是我得到的:
void Connect()
{
dataBase = new QSqlDatabase(QSqlDatabase::addDatabase("QPSQL", "Main"));
dataBase->setHostName(hostName);
dataBase->setPort(port);
dataBase->setDatabaseName(dbName);
dataBase->setUserName(userName);
dataBase->setPassword(userPass);
if(!dataBase->isOpen())
dataBase->open();
}
void Disconnect()
{
if(dataBase != NULL)
if(dataBase->isOpen()){
dataBase->close();
dataBase->removeDatabase("Main");
dataBase = NULL;
}
}
hostName、port、dbName、userName 和 userPass 也是该类的属性。
public:
QSqlDatabase *dataBase;
QString hostName;
int port;
QString dbName;
QString userName;
QString userPass;
每当我尝试断开连接并创建新连接时,我都会收到有关当前连接查询的警告/错误 - 即使我只是“连接”(= 使用函数 Connect() )。 我已经看到了一些类似的主题和文档,说我必须从范围中删除查询,但目前我不知道如何。
【问题讨论】:
标签: c++ postgresql qt