пример - statement java описание




Генерация ANSI SQL INSERT INTO (5)

Мне нужно экспортировать данные из этих таблиц программно с использованием Java

Давай парень! В чем дело? Java - это инструмент для работы с данными, а не для миграции. Если речь идет о ETL - пожалуйста, используйте среды ETL целевой СУБД или напишите код ETL самостоятельно.

У меня есть база данных Oracle с 10 таблицами. Некоторые таблицы содержат текст данных CLOB. Мне нужно экспортировать данные из этих таблиц программно с использованием Java. Данные экспорта должны быть в формате ANSI INSERT INTO SQL, например:

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

Основная идея заключается в том, что мне нужно импортировать эти данные в три разные базы данных: ORACLE , MSSQL и MySQL . Как я знаю, все эти базы данных поддерживают ANSI INSERT INTO. Но я не нашел никакого API / Java-фреймворка для создания сценариев SQL данных. И я не знаю, как обращаться с данными CLOB, как их экспортировать.
Каков наилучший способ экспорта данных из базы данных с Java?

ОБНОВЛЕНИЕ: (01.07.2018)
Я предполагаю, что невозможно вставить текстовые данные больше чем 4000 байтов согласно этому ответу . Как генерировать сценарии PL \ SQL с использованием Java программно? Или есть какой-либо другой формат экспорта, который поддерживает ORACLE, MSSQL и т. Д.?


Вы когда-нибудь думали о правильном ORM-Api? Первым делом я бы обратился к Hibernate или более абстрактному JPA / JPQL. Фреймворк знает все основные диалекты SQL. Все, что вам нужно, это определить ваши связи с диалектами. Затем вы извлекаете данные из базы данных и сопоставляете их с POJO, а затем вставляете (вставляете) данные в другое (другое диалектное) соединение. Должен работать хорошо, я думаю, даже если я никогда этого не делал. Но я знаю, что JPA не нова и широко используется для изменения базы данных, даже когда программное обеспечение уже работает. Этот подход немного неэффективен, поскольку каждая строка преобразуется в POJO, и, на самом деле, массовая вставка недоступна.


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

Это идеальный вариант использования JPA (Java Persistence API), который позволяет вам создать модель, представляющую структуру вашей базы данных. Это текущее решение Java для управления различными типами баз данных.

Из вашей модели вы сможете сгенерировать запрос, совместимый со всеми популярными базами данных.

Поэтому я предлагаю использовать Spring Boot + Spring Data + Spring Batch:

  1. Создайте первое приложение из вашей модели, которое экспортирует содержимое ваших таблиц в формат CSV.
  2. Создайте второе приложение из той же модели, которое импортирует ваши файлы CSV. В зависимости от вашего jdbc url, Spring Boot автоматически запускает соответствующий диалект для вашей целевой базы данных и генерирует правильные запросы (это также относится и к экспорту).

Это может быть сделано в разумные сроки и с достойной производительностью.


Если вы ищете генерацию SQL, есть много библиотек sqlbuilder, которые вы можете использовать.

Вы можете использовать метаданные для получения имен и типов столбцов из запроса select * и использовать их при запросе вставки.

Смотрите https://github.com/jkrasnay/sqlbuilder

Подробнее об этом на http://john.krasnay.ca/2010/02/15/building-sql-in-java.html


Я бы попробовал Scriptella . Является ли ETL с открытым исходным кодом и инструмент для выполнения сценариев написанным на Java, для которого вы определяете в файле XML исходные и целевые соединения и преобразования, если это необходимо. Соединения могут быть JDBC или даже к текстовым файлам и есть функции для пакетной поддержки. Полученный XML-файл может быть обработан программно с помощью Java, Ant или командной строки.

В двухминутном учебном пособии есть примеры копирования таблиц в другую базу данных и работы с BLOB-объектами.





oracle