Приветствую, господа!
Сразу оговорюсь: в джаве, да и в целом в программировании, я новичок.
Вводная часть:
В наличии огромное количество хмл файлов(десятки терабайт).
В виде реляционного представления, один файл разливается на 90 таблиц.
В джаве, вставка происходит с помощью PreparedStatement с подстановкой параметров.
Чтобы минимизировать проблемы с производительностью на этом участке,
все PreparedStatement сгенерированы заранее в виде Map<String,PreparedStatement>, где стринг это имя таблицы.
Парсинг хмл происходит с помощью XMLStreamReader.
Логика работы заключается в следующем:
— Наткнулись на данные.
— Вставили поле в соответствующий PreparedStatement — pstmt.setXXX();
— Наткнулись на закрывающий тэг, выполняем execute.
— и так далее
Пример DML:
insert into t1 (id, p2, p2, p4...p19) values (?,?,?,?,?...?)<br>
Проблема:
Не во всех хмл файлах встречаются все теги, а соответственно все поля.
и когда я делаю
pstmt.execute(в дальнейшем планировался
executeBatch), происходит ошибка типа "
Missing IN or OUT parameter at index:: 2".
То есть он ругается на нехватку параметров.
Вопрос:
Собственно, как его заставить в пустые параметры подставить NULL автоматом?
Если это невозможно, вероятно стоит пересматривать архитектуру.
Использовать такие решения, как PL/SQL на стороне сервера или динамически генерировать PreparedStatement или еще чего.
Изначально ничего такого не планировалось по причине линейности загрузки и упора на производительность.