Загрузка данных из файла Excel в базу данных с использованием Java - PullRequest
5 голосов
/ 05 февраля 2012

Мне нужно загрузить данные в листе Excel в базу данных, используя java.

База данных будет oracle.

Лист Excel будет загружаться один раз в месяц пользователем, использующимвеб-приложение (Spring MVC front end).

В листе Excel будут тысячи записей / строк, например, около 15000 или более.

  1. Какой самый быстрый способ загрузить эти огромные данные в базу данных?Мы используем простой JDBC (шаблон Spring JDBC).
  2. Как мы обрабатываем ошибки транзакции, так как могут быть ошибки при загрузке данных, и в этом случае частично загруженные данные будут бесполезны?
  3. Нам необходимо уведомить пользователя об ошибке, чтобычто он может исправить лист Excel и попробовать еще раз?

Пожалуйста, помогите /

Ответы [ 8 ]

1 голос
/ 10 февраля 2012

Вы можете использовать Apache POI - Java API для Microsoft Documents для обработки файла, а затем использовать обычный JDBC для вставки данных в вашу базу данных.

Это было бы довольно быстро, и вы можете перехватить все исключения, чтобы предупредить пользователя об ошибках.

1 голос
/ 10 февраля 2012

Какую версию оракула вы используете? Если вам нужно только веб-приложение для этого варианта использования, возможно, APEX сделает его вашим другом. Начиная с Oracle 11g, он будет предварительно установлен вместе с базой данных, с 9i вы можете установить его самостоятельно. Это обеспечивает очень хорошую интеграцию с Excel, поэтому даже начинающим пользователям будет легко создать приложение за несколько дней.

0 голосов
/ 16 марта 2012

Я также сделал то же самое, что вы просили. Я сделал следующие шаги

  1. сохраненный файл @ сервер.
  2. Используется POI jar, потому что он поддерживает максимум функций xls
  3. Создан класс Java в соответствии со структурой таблицы
  4. Применена проверка в методе установки, которая будет проверять значение во время установки данных в коллекцию типа (создаваемый класс), обрабатывать исключение с относительным кодом для отслеживания обработки исключения и для настраиваемого сообщения (для отображения конца пользователя) .
  5. как только все записи будут проверены, нажмите базу данных для проверки 2-го уровня, например, получите идентификатор для любого заданного имени. обработать исключение здесь снова, используя код ошибки.
  6. создайте шаблон запроса на вставку для вставки данных в базу данных, попробуйте использовать подготовленный оператор Statement, поскольку он мало безопасен для внедрения SQL.
  7. хороший способ - использовать hibernate или любую другую службу персистентности, потому что она безопасна и управляет транзакциями, ИЛИ для JDBC используйте пакетный запрос для окончательной фиксации, если все нормально, просто откат транзакции

если запись очень большая (15000 не так уж велика), то делите свою работу на разные партии и управляйте ею по потокам.

0 голосов
/ 14 февраля 2012

Ват точно, что вы должны сделать,

1) Используйте Apache POI для преобразования документов Microsoft Excel в XML. Он получает офисный формат openXML. Как только вы получите это. Сохраните его в файловой системе. 2) Во-вторых предоставить ссылку на пользователя для импорта 3) как только он нажмет на импорт, вы начнете кварцевую работу. Так как вы используете весну http://static.springsource.org/spring/docs/1.2.x/reference/scheduling.html

4) В вашем рабочем классе начните извлечение XML, а затем начните транскрипцию (Hibernate). После каждого

Начало новой транзакции весной.

DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setName("ImportFileTransaction");
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);

TransactionStatus status = txManager.getTransaction(def);

после каждого коммита

txManager.commit(status);
status = txManager.getTransaction(def);

получить статус транзакции и продолжить вставку

5) Чтобы уведомить пользователя, сохраните ошибку xml, чтобы строка, содержащая ошибку, была вставлена ​​в этот xml.

Наслаждайтесь !!!!

0 голосов
/ 14 февраля 2012

Сколько столбцов каждой записи в вашем листе данных и насколько велики данные в каждой ячейке? Вы можете вычислить потребление памяти, чтобы увидеть, соответствует ли оно вашей куче после преобразования в объекты Java с использованием Apache POI.

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

0 голосов
/ 14 февраля 2012

Вы можете использовать jExcelAPI или Apache POI , которые бесплатны или вы можете заплатить за Ячейки Aspose , что не так дорого, если вы работаете на Компания.

Каждый из них может быть очень полезным. Например, вы можете использовать библиотеку для поиска ошибок, затем преобразовать в CSV и, наконец, использовать JDBC для вставки в базу данных.

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

0 голосов
/ 07 февраля 2012

Запись на диск и массовый импорт из оракула. Разобрать ошибки и вернуть их пользователю.

0 голосов
/ 05 февраля 2012

Что касается первого вопроса, я думаю, что лучшим решением является преобразование файла Excel в формат .csv (с разделением запятыми), который очень просто анализировать.Я не уверен, что это может помочь, но я нашел эту ссылку .

Для обработки исключений обратите внимание на аннотацию @ ExceptionHandler , которая может вам помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...