我在尝试连接到一个Qt应用程序中的两个不同数据库时出现问题。我有我的信息数据库,它存储应用程序收集的所有信息以及新的日志数据库,使我能够跟踪应用程序,按钮按钮,屏幕加载等发生的所有更改,以便在其发布后进行调试。另外,数据库工作得很好,但是当我尝试使用它们时,只有一个会起作用。我读到这可能是因为我没有命名连接,显然只有最近连接的数据库才能使用默认连接。然而,当我把数据库名,他们不会在所有的工作,ISOPEN()将返回两个真实的,但只要他们试图执行一个查询我得到的错误QSqlDatabase连接到多个数据库
"QSqlQuery::prepare: database not open"
"QSqlError(-1, "Driver not loaded", "Driver not loaded")"
我的两个数据库声明是:
database_location = filepath.append("/logger.sqlite");
logDB = QSqlDatabase::addDatabase("QSQLITE", "LoggerDatabaseConnection");
logDB.setHostName("localhost");
logDB.setDatabaseName(database_location);
记录程序数据库连接和:
database_location = filepath.append("/db.sqlite");
db = QSqlDatabase::addDatabase("QSQLITE", "NormalDB");
db.setHostName("localhost");
db.setDatabaseName(database_location);
此外,当我运行在数据库中的第一个查询,看是否存在其表我使用
QSqlQuery query("LoggerDatabaseConnection");
对于普通数据库也是这样,但即使在声明数据库连接来运行查询之后,我仍然遇到连接问题。
用于应用程序的数据库在名称空间中声明为静态QSqlDatabase以创建全局效果,因此每个人都可以访问它,这是以前的程序员,并且我创建了具有专用数据库连接的Singleton Log数据库。就像我说的那样,两个版本的代码是分开工作的,但是当他们在一起时,他们正在互相争斗。我知道关于Singleton vs Dependecy Injection的正确设计存在着巨大的争议,但代码再次单独运作,所以我很满意现在的设计。如果有任何信息丢失或有任何想法,请告诉我。谢谢。
我最终只是将数据库与记录器相结合,我试图避免让所有的模块都保持一致。但是,我使用两个数据库连接并使用您所建议的语法开始了一个测试项目,而且似乎最终还是有效的。非常感谢您的宝贵时间。 – JordanTSI 2014-10-17 14:53:00