Java MS SQL -> преобразование MySQL - PullRequest
2 голосов
/ 09 ноября 2010

Я создаю приложение на работе и мне нужен совет. У меня есть несколько уникальная проблема, в которой мне нужно собирать данные, размещенные на MS SQL Server, и пересаживать их на mySQL сервер каждые 15 минут.

Ранее я делал это в C # с помощью DataGrid, но сейчас пытаюсь создать версию Java, которую можно запустить на сервере Ubuntu, но не могу найти аналогичную модель для Java.

Просто дать небольшой фон

Когда я извлекаю данные из MS SQL Server, он всегда имеет 9 столбцов, но может содержать от 0 до 1000 строк.

Перед слепой вставкой в ​​сервер MySQL я манипулирую некоторыми данными.

  • Я конвертирую временной столбец в CST на основе столбца STATE
  • Я убрал некоторые символы, чтобы предотвратить внедрение SQL

Я пытался использовать ResultSet, но у меня возникли проблемы с правилами «только результаты перенаправления».

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

Ответы [ 2 ]

2 голосов
/ 09 ноября 2010

Это звучит как работа для PreparedStatements!

Определено здесь: http://download.oracle.com/javase/6/docs/api/java/sql/PreparedStatement.html

Быстрый пример: http://download.oracle.com/javase/tutorial/jdbc/basics/prepared.html

PreparedStatements позволяет группировать наборы данных перед их отправкой в ​​целевую базу данных. Они также позволяют использовать метод PreparedStatement.setString, который обрабатывает экранирующие символы для вас.

Что касается преобразования времени, я извлекаю значение STATE из строки, а затем извлекаю значение времени. Прежде чем вызывать PreparedStatement.setDate, при необходимости преобразуйте время в CST.

Не думаю, что вам потребуются все накладные расходы, необходимые для инструмента ORM.

1 голос
/ 09 ноября 2010

Вы можете рассмотреть возможность использования технологии ORM, такой как Hibernate. Поначалу это может показаться немного тяжелым, но это означает, что вы можете легко поддерживать различные отображения таблиц для различных баз данных, а также использовать возможности Java-библиотеки RegEx для любых манипуляционных требований.

Таким образом, у вас будет класс Java, представляющий исходную таблицу (с его отображением Hibernate), и другой класс Java, представляющий целевую таблицу, и, наконец, служебный класс преобразования, который выполняет любые манипуляции с этими данными. Hibernate позаботится о CRUD SQL для вас, так что вам не нужно беспокоиться о специфичном для базы данных SQL (если вы правильно отобразите отображение).

Это также уменьшает проблему внедрения SQL

...