2014-10-16 455 views
1

我在尝试连接到一个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的正确设计存在着巨大的争议,但代码再次单独运作,所以我很满意现在的设计。如果有任何信息丢失或有任何想法,请告诉我。谢谢。

回答

3
QSqlQuery query("LoggerDatabaseConnection"); 

构造函数的第一个参数是查询,而不是连接名称。由于您没有指定数据库对象,它将使用默认连接。

尝试是这样的:

QSqlQuery query1("YourFirstQuery", db); 
QSqlQuery query2("YourSecondQuery", logDB); 

重要:也不要忘记使用它通过调用QSqlDatabase::open()QSqlDatabase::close()后打开和关闭数据库之前/。

+0

我最终只是将数据库与记录器相结合,我试图避免让所有的模块都保持一致。但是,我使用两个数据库连接并使用您所建议的语法开始了一个测试项目,而且似乎最终还是有效的。非常感谢您的宝贵时间。 – JordanTSI 2014-10-17 14:53:00