H2 Java插入忽略 - 允许异常

the*_*six 6 java exception h2

我正在开发一个与H2数据库连接的java插件.我真正想要的是"插入忽略"声明; 但是,我知道H2并不支持这一点.我也知道Merge,但这真的不是我想要的,如果记录存在我不想改变它.

我正在考虑的是只运行插入并让重复键异常发生.但是,我不希望这填写我的日志文件.数据库调用发生在我无法更改的导入类中.所以我的问题是:

  1. 这是合理的事吗?我不是一个让错误发生的人,但这似乎是这种情况下最好的方式(不应该发生这么多).
  2. 如何防止此异常命中我的日志文件?如果没有办法阻止堆栈中的异常,我可以重定向输出的堆栈跟踪的输出吗?

谢谢.

Tho*_*ler 10

一种解决方案是使用:

insert into test 
select 1, 'Hello' from dual 
where not exists(select * from test where id = 1)
Run Code Online (Sandbox Code Playgroud)

这适用于所有数据库(双部分除外;您可能需要创建自己的虚拟表,其中包含一行).

要禁用日志记录异常,请附加;trace_level_file=0到数据库URL:

jdbc:h2:~/test;trace_level_file=0
Run Code Online (Sandbox Code Playgroud)

或运行SQL语句:

set trace_level_file 0
Run Code Online (Sandbox Code Playgroud)