jdbc util 挿入時にhsqldbの更新



shutdown hsqldb (2)

INSERTを呼び出してHSQLDBのカラムを更新する解決策を知っている人はいますか? 私は自分のコードを挿入できるようにしたい、そして既にデータがある場合はそのデータを更新したい。 私はMySQlを知っています、私は信じて、 '重複キー更新'を持っています。 私はこれに関する最近の文書を見つけることができないようです。


良いサンプルは時にはMERGEステートメントの正式な文書です :)

サンプル1

最初の列が主キーである列( COL_AおよびMY_TABLE )を持つ表( MY_TABLE )の場合は、次のようになります。

MERGE INTO MY_TABLE AS t USING (VALUES(?,?)) AS vals(a,b) 
        ON t.COL_A=vals.a
    WHEN MATCHED THEN UPDATE SET t.COL_B=vals.b
    WHEN NOT MATCHED THEN INSERT VALUES vals.a, vals.b

サンプル2

テーブルに別の列( COL_C )を追加してみましょう:

MERGE INTO MY_TABLE AS t USING (VALUES(?,?,?)) AS vals(a,b,c) 
        ON t.COL_A=vals.a
    WHEN MATCHED THEN UPDATE SET t.COL_B=vals.b, t.COL_C=vals.c
    WHEN NOT MATCHED THEN INSERT VALUES vals.a, vals.b, vals.c

サンプル3

次に、主キーを最初の2つの列( COL_ACOL_B )で構成します。

MERGE INTO MY_TABLE AS t USING (VALUES(?,?,?)) AS vals(a,b,c) 
        ON t.COL_A=vals.a AND t.COL_B=vals.b
    WHEN MATCHED THEN UPDATE SET t.COL_C=vals.c
    WHEN NOT MATCHED THEN INSERT VALUES vals.a, vals.b, vals.c

楽しい!


HSQLDBは​​、この目的のためにMERGE文を提供します。

http://hsqldb.org/doc/2.0/guide/dataaccess-chapt.html#dac_merge_statement

また、短いストアド・プロシージャを作成して挿入し、制約違反の例外をキャッチして更新を実行することもできます。

http://hsqldb.org/doc/2.0/guide/sqlroutines-chapt.html#src_psm_handlers

アップデート:バージョン2.3.4より、HSQLDBは​​ON DUPLICATE KEYのMySQL構文もサポートしています





hsqldb