2013-02-28 1 views
-2

У нас есть две базы данных Oracle, которые имеют одинаковую структуру. Нам нужно скопировать содержимое одной таблицы из одной базы данных в другую. Я пишу программу JAVA для решения этой задачи. Поскольку структура таблицы может измениться в будущем, программа должна быть способна сама адаптироваться. Я попытался следующий код:Как скопировать таблицу из одной базы данных в другую с помощью JDBC?

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(); 
       } 

там что-то случилось с моим кодом? Какие-либо предложения ? Я должен отметить, что по какой-то причине мне не разрешено использовать внешние инструменты!

+1

Если вам не разрешено использовать Oracle Dumps, разрешено ли вам использовать инструменты ETL? Потому что это будет следующий самый простой подход. –

+2

Уродливый как грех. Вы не закрываете ресурсы, не обрабатываете транзакции или не используете PreparedStatement правильно. Я бы использовал ссылку или свалку. – duffymo

+0

@duffymo Я действительно закрываю свои ресурсы! это только верхняя часть кода. Это всего лишь код кода для тестирования. Я не буду использовать это в реальной среде! – Tohid

ответ

3

Не тратьте впустую свое время. Создайте ссылку на базу данных и напишите несколько строк в PL/SQL, и все готово.

+0

ссылка на базу данных работает, если мы делаем это на одном сервере. asak он не может использоваться, когда вы имеете дело с разными серверами. – Tohid

+0

Нет, вы не можете сделать это с помощью произвольных баз данных Oracle. –

1

Я думаю, что вы просите проблему с этим подходом. Как часто меняется структура таблицы? Насколько важны данные в этой таблице?

Я предлагаю вам экрнализировать запросы и любую другую конфигурацию, которая вам нужна, а затем убедитесь, что у вас хорошая обработка ошибок и изящно выйдите, если схема больше не является тем, что вы ожидали.

Затем вы можете обновить конфигурацию, а не код, если изменяется схема.

+0

, если честно, это не так сильно изменится. в идеале мы хотели, чтобы программа была совместима с нашими будущими версиями, но, видимо, нет простого способа сделать это. поэтому, вероятно, я собираюсь принять ваш совет по этому поводу: – Tohid

Смежные вопросы