2011-03-29 93 views
0

我正在开发一个Qt应用程序,我想一次从两个不同的数据库中的表中查询数据。我使用Oracle作为数据库,但是我的雇主希望我在不使两个数据库之间建立数据库链接的情况下实现这一目标。所以我想用Qt sql模块对象开发一个跨数据库查询引擎。但它不应该像SQL解析器那样复杂。我只想从两个数据库中的表中查询数据,并在1视图中显示它们,并使用通用接口执行这些查询。但据我所知,Qt sql模块只能用于从1个数据库查询。如果有人曾经做过这种编程,或者有人对此有所了解,那么您的建议将非常感谢。非常感谢你。跨数据库查询引擎Oracle数据库使用Qt

+0

不同的Oracle数据库?在单独的物理主机上,还是单独的Oracle实例? [Oracle的dblink功能](http://www.stanford.edu/dept/itss/docs/oracle/10g/server.101/b10759/statements_5005.htm)比自行设置更好。 – 2011-03-29 05:08:04

+0

是的,这两个数据库都在同一个物理主机上,这意味着我正在谈论2个实例。我的雇主希望我不使用dblink的原因是,有些用户没有权限查看这些实例中的所有表,因此如果我使用dblink进行查询,而具有较少权限的用户使用我的应用程序,他们将能够做出不希望的查询。 – kasper360 2011-03-29 05:20:46

+0

数据库不是实例 - 一个实例可以容纳多个数据库。可能是授予访问权限(基于我希望的角色)到另一个数据库,不需要dblink,但真正的问题似乎是授予 – 2011-03-29 05:24:41

回答

0

我之前通过使用QSqlDatabase打开多个数据库连接做了类似的事情。

因此,通过官方文档的启发,你可以尝试这样的事:

//Open database 1: 
QSqlDatabase db1 = QSqlDatabase::addDatabase("QOCI","db1"); 
db.setHostName("acidalia"); 
db.setDatabaseName("tns1"); 
db.setUserName("mojito"); 
db.setPassword("J0a1m8"); 
bool ok = db.open(); 

.. 
//Open database 2: 
QSqlDatabase db2 = QSqlDatabase::addDatabase("QOCI","db1"); 
.. 
db.setDatabaseName("tns2"); 
.. 

现在databasese是开放的,在查询您可以使用它们。记分贝变量的作用域的每DOC为:

{ 
    QSqlDatabase db = QSqlDatabase::database("db1"); 
    QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db); 
} 

{ 
    QSqlDatabase db = QSqlDatabase::database("db2"); 
    QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db); 
} 

//Clean up 
QSqlDatabase::removeDatabase("db1"); 
QSqlDatabase::removeDatabase("db2"); 

removeDatabase上清理