Java 如何使用JDBC将表从一个数据库复制到另一个数据库?

Java 如何使用JDBC将表从一个数据库复制到另一个数据库?,java,jdbc,Java,Jdbc,我们有两个结构相同的Oracle数据库。我们需要将一个表的内容从一个数据库复制到另一个数据库中。我正在编写一个JAVA程序来处理这个任务。由于表格的结构将来可能会发生变化,因此程序必须能够自我调整。 我尝试了以下代码: try { ResultSet rsConfig = getConfigRows(srcDatabase); // this method returns SELECT * FROM TEST_TABLE Resul

我们有两个结构相同的Oracle数据库。我们需要将一个表的内容从一个数据库复制到另一个数据库中。我正在编写一个JAVA程序来处理这个任务。由于表格的结构将来可能会发生变化,因此程序必须能够自我调整。 我尝试了以下代码:

try {
                ResultSet rsConfig = getConfigRows(srcDatabase); // this method returns SELECT * FROM TEST_TABLE
                ResultSetMetaData rsmd = rsConfig.getMetaData();
                int colCount = rsmd.getColumnCount();
                String columns = "";
                String values = "";
                for (int j = 1; j <= colCount; j++) {                       
                    columns += rsmd.getColumnName(j);
                    if (j <= colCount)
                        columns += ",";
                    values += "?";
                    if (j <= colCount)
                        values += ",";
                }

                String sql = "INSERT INTO TEST_TABLE(" + columns + ") VALUES("
                        + values + ")";
                PreparedStatement psDest = destDatabase.prepareStatement(sql);

                while (rsConfig.next()) {
                    for (int j = 1; j <= colCount; j++) {
                        psDest.setObject(j, (Object) rsConfig.getObject(rsmd
                                .getColumnName(j)));
                    }
                    psDest.executeUpdate();
                }
试试看{
ResultSet rsConfig=getConfigRows(srcDatabase);//此方法从TEST_表返回SELECT*
ResultSetMetaData rsmd=rsConfig.getMetaData();
int colCount=rsmd.getColumnCount();
字符串列=”;
字符串值=”;

对于(int j=1;j我想你是在自找麻烦。表结构真的多久改变一次?表中的数据有多重要

我建议您将查询和您需要的任何其他配置外部化,然后确保您具有良好的错误处理能力,如果模式不再是您所期望的,请优雅地退出


然后,如果架构发生更改,您可以更新配置而不进行编码。

不要浪费您的时间。创建一个数据库链接并用PL/SQL编写几行代码,您就完成了。

如果不允许使用Oracle转储,您可以使用ETL工具吗?因为这将是下一个最简单的方法。非常丑陋。如果不关闭资源,请处理使用事务,或正确使用PreparedStatement。我会使用链接或转储。@duffymo我会关闭我的资源!这只是代码的顶部部分。这只是用于测试目的的代码草案。我不会在实际环境中使用它!@bmucklow不,很遗憾,我们不允许使用任何外部工具。ab没有解释这一点如果我们在一台服务器上使用PreparedStatement.database链接,则可以使用该链接。如果您在处理不同的服务器,则可能无法使用该链接。不,它不适用于任意Oracle数据库。老实说,它没有太大变化。理想情况下,我们希望该程序与我们的未来版本兼容,但显然没有简单的方法。所以我可能会接受你的建议:)