H2 Java Insert ignore - разрешить исключение

Я работаю над плагином java, взаимодействующим с базой данных H2. Что мне действительно нужно, так это оператор «Вставить игнорирование»; однако я знаю, что H2 не поддерживает это. Я также знаю о слиянии, но это действительно не то, что я хочу, если запись существует, я не хочу ее менять.

То, что я рассматриваю, - это просто запустить вставку и позволить произойти исключению дублирующего ключа. Однако я не хочу, чтобы это заполняло мой файл журнала. Вызов БД происходит в импортированном классе, который я не могу изменить. Итак, мои вопросы:

  1. Это разумный поступок? Я не из тех, кто допускает ошибки, но в данном случае это кажется лучшим способом (это не должно происходить слишком часто).
  2. Как я могу предотвратить попадание этого исключения в мой файл журнала? Если нет способа заблокировать исключения в стеке, могу ли я перенаправить вывод трассировки стека, которая выводится?

Спасибо.


person therealsix    schedule 18.07.2011    source источник


Ответы (1)


Одним из решений является использование:

insert into test 
select 1, 'Hello' from dual 
where not exists(select * from test where id = 1)

Это должно работать для всех баз данных (за исключением двойной части; вам может потребоваться создать собственную фиктивную таблицу с одной строкой).

Чтобы отключить исключения ведения журнала, добавьте ;trace_level_file=0 к URL-адресу базы данных:

jdbc:h2:~/test;trace_level_file=0

или запустите оператор SQL:

set trace_level_file 0
person Thomas Mueller    schedule 18.07.2011
comment
Хороший обходной путь - уже сделал что-то подобное с двумя отдельными запросами во время ожидания. Я все еще хотел бы знать об исключениях Java. - person therealsix; 18.07.2011
comment
Я не собираюсь проверять это, но я не уверен, что это сработает (все равно дал вам баллы). Исключение, о котором я говорю, регистрируется в приложении, а не напрямую из h2. - person therealsix; 20.07.2011
comment
Я бы опубликовал свой код/журнал, но это не мой код для публикации. Спасибо. - person therealsix; 20.07.2011
comment
кроме двойственной части; вам может понадобиться создать собственную фиктивную таблицу с одной строкой. Это звучит очень хакерски. - person Eidan Spiegel; 22.03.2017