2011-07-18 107 views
4

我正在研究與H2數據庫接口的java插件。我真正想要的是「插入忽略」聲明;然而,我知道H2不支持這一點。我也知道合併,但這實在不是我想要的,如果記錄存在,我不想改變它。H2 Java插入忽略 - 允許異常

我正在考慮的是隻運行插入並讓重複鍵異常發生。但是,我不希望這填充我的日誌文件。 DB調用發生在我無法更改的導入類中。所以我的問題是:

  1. 這是一個合理的事情嗎?我不是讓錯誤發生的人,但這似乎是這種情況下的最佳方式(它不應該發生那麼多)。
  2. 我怎樣才能保持這個例外從擊中我的日誌文件?如果沒有辦法阻止堆棧中的異常,我可以重定向輸出的堆棧跟蹤輸出嗎?

謝謝。

回答

9

一種解決方案是使用:

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 
+0

尼斯workaround-已經做了2個單獨的查詢類似的東西在等待。儘管如此,我仍然想知道Java異常。 – therealsix

+1

避免記錄異常:我更新了我的答案。 –

+0

我不打算測試這個,但我不確定它會起作用(無論如何都給了你點數)。我提到的異常是在應用程序中記錄的,而不是直接從h2登錄。 – therealsix