Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

H2 Java Insert ignore - allow exception

Tags:

java

exception

h2

I am working on a java plugin interfacing with an H2 database. What I really want is an "Insert Ignore" statement; however, I'm aware that H2 doesn't support this. I am also aware of Merge, but this is really not what I want, if the record exists I don't want to change it.

What I am considering is to just run the insert and let the duplicate key exception happen. However, I don't want this to fill my log file. The DB call happens in an imported class that I can't change. So my questions are:

  1. Is this a reasonable thing to do? I'm not one for letting errors happen, but this seems like the best way in this case (it should not happen all that much).
  2. How can I keep this exception from hitting my log file? If there isn't a way to block exceptions down the stack, can I redirect the output of the stack trace that is output?

Thanks.

like image 492
therealsix Avatar asked Jul 18 '11 17:07

therealsix


1 Answers

One solution is to use:

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

This should work for all databases (except for the dual part; you may need to create your own dummy table with one row).

To disable logging exceptions, append ;trace_level_file=0 to the database URL:

jdbc:h2:~/test;trace_level_file=0

or run the SQL statement:

set trace_level_file 0
like image 195
Thomas Mueller Avatar answered Nov 03 '22 12:11

Thomas Mueller