我在尝试连接到一个 Qt 应用程序中的两个不同数据库时遇到问题。我有存储应用程序收集的所有信息的信息数据库和新的日志数据库,它允许我跟踪应用程序发生的所有更改、按钮按下、屏幕加载等,以便在发布后轻松调试。另外,数据库运行良好,但是当我尝试同时使用它们时,只有一个可以运行。我读到这可能是因为我没有命名连接,显然只有最近连接的数据库才能使用默认连接。但是,当我给数据库名称时,它们根本不起作用,isOpen() 将在两者上都返回 true,但是一旦它们尝试执行查询,我就会得到错误
"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);
对于 Logger 数据库连接和:
database_location = filepath.append("/db.sqlite");
db = QSqlDatabase::addDatabase("QSQLITE", "NormalDB");
db.setHostName("localhost");
db.setDatabaseName(database_location);
此外,当我在数据库上运行第一个查询以查看它们的表是否存在时,我正在使用
QSqlQuery query("LoggerDatabaseConnection");
对于普通数据库也是如此,但即使在声明数据库连接以运行查询后,我仍然遇到连接问题。
应用程序使用的数据库在命名空间中声明为静态 QSqlDatabase 以创建全局效果,因此每个人都可以访问它,这是以前的程序员,我将 Log 数据库创建为具有私有数据库连接的 Singleton。就像我说的那样,两个版本的代码是分开工作的,但是当它们在一起时,它们就会互相争斗。我知道关于 Singleton vs Dependecy Injection 的正确设计存在巨大争议,但是代码再次单独工作,所以我对它现在的设计方式感到满意。如果有任何遗漏的信息或您有任何想法,请告诉我。谢谢你。