我最近开始使用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;
每当我尝试diconnect并创建新连接时,我都会收到有关当前连接查询的警告/错误 - 即使我只是连接了#34; (=使用函数Connect())。 我已经看过很少类似的主题和文档,说我必须从范围中删除查询,但此时我不知道如何。
答案 0 :(得分:0)
当您查看QSqlDatabase
文档时,方法removeDatabase
是静态的,因此您的方法Disconnect
逻辑应该如下:
void Disconnect()
{
if(dataBase != NULL) {
if(dataBase->isOpen()){
dataBase->close();
}
delete dataBase;
dataBase = NULL;
}
QSqlDatabase::removeDatabase("Main");
}