H2 Java插入忽略 – 允许exception

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

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

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

谢谢。

一种解决方案是使用:

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

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

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

 jdbc:h2:~/test;trace_level_file=0 

或运行SQL语句:

 set trace_level_file 0