2014-12-30 78 views
0

通常要在網絡中同步一個表我可以編寫一個簡單的sql查詢並運行它來同步表,但如果源數據庫不同(可能是db2, mssql,mysql,oracle - 從哪裏我可以獲取數據到目標表)。需要在java中同步來自不同數據庫的兩個表

我應該如何去編寫java中的代碼來實現這一目標?我知道我可以在java中創建dblink來從外部網絡數據庫獲取數據,但是dblinks只能用於相同類型的數據庫。我無法弄清頭腦中的執行情況。請點我在正確的方向,所以我可以帶寶貝步驟和學習,因爲我是新來的Java

回答

2

你可以用普通的JDBC來做到這一點。代碼示例,未經測試:

void migrate() throws SQLException { 
     Connection connA = DriverManager.getConnection("jdbc:oracle:thin:@myhost:1521:orcl"); 
     Connection connB = DriverManager.getConnection("jdbc:mysql://192.168.1.33/test"); 

     PreparedStatement stmA = connA.prepareStatement("select * from product where 1=1"); 
     PreparedStatement stmB = connB.prepareStatement("insert into prod values(?,?,?,?)"); 

     ResultSet rs = stmA.executeQuery(); 
     while (rs.next()) { 
      for (int i = 0; i < rs.getMetaData().getColumnCount(); i++) { 
       stmB.setObject(i + 1, rs.getObject(i + 1)); 
      } 
      stmB.executeUpdate(); 
     } 

     connA.close(); 
     connB.close(); 
    } 
+0

嗨,彼得我已經嘗試了類似於您所回答的內容。有沒有優化的方法來做到這一點?就像使用API​​(例如:oracle api)來實現一樣?請幫忙!! – kittu

+0

你是'Java新手'並要求優化。你有什麼問題,記憶,速度? – PeterMmm

+0

我的意思是說,而不是使用普通的sql查詢來實現代碼,我被告知oracle會通知發生的表中的更改/更新,並基於哪些我必須開發代碼。我猜測它必須與oracle api和jdbc相關,並且令我驚訝的是我在google上發現了這個關於通知服務的鏈接。請引導我,如果我走在正確的道路上? [鏈接] http://docs.oracle.com/cd/E11882_01/java.112/e16548/dbchgnf.htm#JJDBC28816 – kittu

0

數據遷移如果你想從一個數據庫中的數據遷移到不同類型的另一個數據庫,

相同

假設你有AB兩個不同的數據庫,你必須從A數據庫中以XML格式導出數據,表名是XML父節點(根據你的數據庫創建結構)。

然後解析XML's,創造出現在A每個表的對象,之後使用任何XML解析器將解析您的XML,使用Hibernate保存()API把每個對象在另一個數據庫管理,如果表中他們有關係,那麼首先插入主表數據​​,然後插入子項數據。

通過這種方法,您無需每次都依賴目的地(B)數據庫,藉助休眠可以輕鬆更改數據庫。

相關問題