2011-07-18 8 views
4

私はH2データベースに接続するJavaプラグインを開発中です。私が本当に欲しいのは、 "Insert Ignore"ステートメントです。しかし、私はH2がこれをサポートしていないことを認識しています。私はMergeも認識していますが、これは本当に私が望むものではありません。レコードが存在する場合、私はそれを変更したくありません。H2 Java挿入無視 - 例外を許可する

私が検討しているのは、挿入を実行して重複キーの例外を発生させることです。しかし、私はこれが私のログファイルを埋めることを望んでいません。 DB呼び出しは、インポートできないクラスで発生します。だから私の質問は:

  1. これは妥当なことですか?私はエラーを起こさせるためのものではありませんが、これはこの場合の最良の方法のようです(それはあまり起こりません)。
  2. この例外でログファイルが記録されないようにするにはどうすればよいですか?スタックの下で例外をブロックする方法がない場合、出力されたスタックトレースの出力をリダイレクトできますか?

ありがとうございます。

答えて

9

一つの解決策は、使用することです:

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

これは、すべてのデータベースのために働く必要があります(デュアル一部を除いて、あなたは1行を使用して独自のダミーテーブルを作成する必要があるかもしれません)。

jdbc:h2:~/test;trace_level_file=0 

またはSQLステートメントを実行します:データベースのURLへ;trace_level_file=0を追加し、ログの例外を無効にするには

待っている間に

set trace_level_file 0 
+0

ニースworkaround-はすでに2つの別々のクエリと似た何かをしました。私はまだJavaの例外について知りたいです。 – therealsix

+1

例外を記録しないようにする:私は自分の答えを更新しました。 –

+0

私はこれをテストするのを嫌うつもりはありませんが、それがうまくいくかどうかはわかりません(とにかくポイントを与えました)。私が言及している例外は、h2からではなく、アプリケーションに記録されています。 – therealsix