| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Insert into table данных из ResultSet |
| Автор: SherbAnt 25.1.2011, 13:08 |
| Добрый день, уважаемые. Такая ситуация. Есть 2 базы данных от разных производителей (Teradata[1] и Derby[2]). Нужно выполнить select запрос к первой и создать таблицу с результатом во второй. Создание таблицы я уже сделал на основе мета-информации из ResultSet. А вот с insert'ом беда. Очень многие нюансы этих двух БД не сходятся. Приходится делать кучу костылей что бы построить валидный запрос. Может я выдумываю велосипед? Подскажите, пожалуйста, какое нибудь более менее готовое решение. Заранее спасибо |
| Автор: LSD 25.1.2011, 14:47 | ||
ORM, например Hibernate. |
| Автор: SherbAnt 25.1.2011, 14:51 |
| Тоже вариант, конечно. Но больно "дорогой". Вторая база по возможности должна быть embedded. Что бы пользователь вообще не заморачивался с ее установкой и настройкой. Похоже придется писать свой конвертор типов и значений |
| Автор: LSD 25.1.2011, 14:53 |
Тут уж сами решайте, что вам дороже - время разработчика или пара мегабайт, на библиотеки. |
| Автор: Temdegon 25.1.2011, 16:04 | ||
Ну это не мешает использовать Hibernate. А вообще, какая может быть беда с Insert? Какие там костыли? Можете подробнее описать? По мне так prepareStatement и вперед. |
| Автор: SherbAnt 26.1.2011, 18:57 |
| Костыли есть. Ну например у этих баз разный формат хранения Timestamp. Решил проблему переформатированием строки в нужный формат. Далее DerbyDB не знает про такой тип данных как TINYINT. Пришлось вставить проверку типа и возвращать INTEGER. Когда наткнулся на третье несовпадение, сработал внутренний сигнал тревоги. Понял что код обрастает костылями, и решил спросить у знающих людей Hibernate использовать нельзя, так как ResultSet ко мне приходит снаружи. Я его перехватываю. В общем, написал свой wrapper который оборачивает Type/Value входящего ResultSet'а. Хотя бы размести все костыли в одном месте. Всем спасибо за советы. Тему я помечу как решенную, но если появятся мысли - welcome! С удовольствием перепишу этот ужас по фэншую |
| Автор: Temdegon 27.1.2011, 00:39 | ||||||
Я чего-то не понимаю, по этому и хочу разобраться, т.сказать на будущее.
Не врубаюсь, причем здесь формат хранения. Это проблема базы данных и JDBC. Я подозреваю, вы используете http://download.oracle.com/javase/1.4.2/docs/api/java/sql/ResultSet.html У него есть метод
А http://download.oracle.com/javase/1.4.2/docs/api/java/sql/PreparedStatement.html есть метод
Какие строки? Какие форматы хранения? Или вы SQL вместе с значениями в строку собираете? То же самое и с TINYINT. Определилсь, что будете использовать вместо него INTEGER, ну так и делайте getInt, SetInt. Я с JDBC мало работал, но мне казалось что там все просто. Сейчас вот закрались сомнения, что я чего-то не догоняю |
| Автор: LSD 27.1.2011, 17:45 | ||
Кстати для вставки можно использовать непосредственно ResultSet.
|
| Автор: SherbAnt 27.1.2011, 20:36 |
Спасибо! Вот этого я не знал |
| Автор: Temdegon 27.1.2011, 20:56 |
| Мммда... Мой вопрос че-то игнорят |