2011-03-29 126 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上清理