2014-03-25 234 views
8

我需要從一個數據庫中獲取一個表並將其上傳到不同的數據庫。 因此,我創建了兩個單獨的連接。這裏是我的代碼如何將表從一個數據庫複製到另一個數據庫?

Connection connection1 = // set up connection to dbms1 
Statement statement = connection1.createStatement(); 
ResultSet result = statement.executeQuery("select * from ............. "); 

Connection connection2 = // set up connection to dbms2 
// Now I want to upload the ResultSet result into the second database 
Statement statement2 = connection2.createStatement("insert into table2 " + result); 
statement2.executeUpdate(); 

上述最後一個行不工作 我怎樣才能做到這一點?底線是如何重用現成結果集

ResultSet是一個現成的java對象。我希望有一種方法將它添加到批次或這樣的事情和executeUpdate但不寫結果集到一些臨時空間(Listcsv等),並插入

+0

「insert into table2」+ result「我不認爲你可以做到這一點,從你的結果集中提取每一行數據並構建一個合適的sql插入語句 –

+0

我知道我可以將這些數據寫入一個csv文件然後插入一行一行,但是這會花費很多時間,我希望有一個更好的方法:''ResultSet''是一個Java對象,必須有一種不會摺疊它的方式...必須有一種方法來重用它 –

+0

這可以幫助: http://stackoverflow.com/questions/11268057/how-to-create-table-based-on-jdbc-result-set – Gee858eeG

回答

3

做到這一點的最簡單方法插入的是prepared statement。它允許您創建一個可用於多次使用不同參數值運行查詢的單個語句對象。

try (final Statement statement1 = connection1.createStatement(), 
    final PreparedStatement insertStatement = 
    connection2.prepareStatement("insert into table2 values(?, ?)")) 
{ 
    try (final ResultSet resultSet = 
     statement1.executeQuery("select foo, bar from table1")) 
    { 
     while (resultSet.next()) 
     { 
      // Get the values from the table1 record 
      final String foo = resultSet.getString("foo"); 
      final int bar = resultSet.getInt("bar"); 

      // Insert a row with these values into table2 
      insertStatement.clearParameters(); 
      insertStatement.setString(1, foo); 
      insertStatement.setInt(2, bar); 
      insertStatement.executeUpdate(); 
     } 
    } 
} 

該行插入table2,你通過從table1結果重複,所以沒有必要存儲整個結果集。

您也可以使用準備好的語句的addBatch()executeBatch()方法來排隊了所有的插入和一次全部發送到數據庫,而不是發送單獨的消息到數據庫中的每個個體插入的行。但是這迫使JDBC將本地所有待處理的插入內容保存在內存中,這似乎是您要避免的。所以在這種情況下,一次一行的插入是你最好的選擇。

+0

爲什麼我們必須用Java來做到這一點?我們可以使用DB鏈接並在數據庫中進行。 – JavaHopper

+0

因爲有時數據庫所有者不想將它們鏈接在一起。在我們的情況下,通常是出於安全原因。 – VolleyJosh

相關問題