2014-03-25 183 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

相关问题