Hier mein Problem; in einem solchen Fall klagt es über doppelte Verbindungen mit dem gleichen Verbindungsname:Wie behandelt man Datenbankverbindungen in Qt?
Test::Test(QString connectionName)
{
db=QSqlDatabase::addDatabase("QMYSQL",connectionName);
}
int main(int argc, char *argv[])
{
QString connectionName=QString("test");
QCoreApplication a(argc, argv);
Test myDb(connectionName);
Test myDb2(connectionName);
return a.exec();
}
Hier ist meine Lösung:
Test::Test(QString connectionName)
{
if(!QSqlDatabase::contains(connectionName))
db=QSqlDatabase::addDatabase("QMYSQL",connectionName);
else
db=QSqlDatabase::database(connectionName);
}
int main(int argc, char *argv[])
{
QString connectionName=QString("test");
QCoreApplication a(argc, argv);
{
Test myDb(connectionName);
Test myDb2(connectionName);
}
QSqlDatabase::removeDatabase(connectionName);
return a.exec();
}
1-) Ist dies ein guter Weg, um dieses Problem zu umgehen?
2-) Haben Sie einen anderen Vorschlag?
3-) Denken Sie, dass dies ein Nachteil für Qt ist?
für 2: Was passiert, wenn ich verschiedene Klassen haben, die um denselben Verbindungsnamen verwenden Datenbank zu verbinden? – metdos
Für 3: Ich ähnele es der globalen Variable, ist es eine Art von schlechter Nutzung, nicht wahr? – metdos
@metdos: Für 2: Sie können den DB-Handle übergeben, anstatt den Verbindungsnamen zu übergeben. Oder übergeben Sie den Verbindungsnamen, aber fügen Sie ihn nicht hinzu, rufen Sie die Verbindung einfach über den Namen von QSqlDatabase ab. –