2016-10-05 9 views
1

データベースに更新または挿入する必要がある1500個のレコードがあるJAVA要件があります。JAVAおよびJPA 1.0を使用してDB2に大量の更新または挿入する

userIdでレコードが存在する場合は、それを更新します。 userIdでレコードが存在しない場合は、それを挿入します。

また、10番目のレコードがエラーになる場合は、そのレコードのエラーコード を取得する必要があります。

私はJPA 1.0

Aを使用して2つのオプション)レコードが存在するかどうかをチェックするために選択し火を持っているように見えます。はいの場合は、更新を実行します。そうでない場合は、挿入してください。

B)

は、他のより効率的な方法はありますか?...更新クエリを発射だけにして、常に挿入火災,,,私はuniqeレコード例外を取得これはできるだけ早くできるだけ少ないクエリで行うことができますか?

ENV- JAVA、JPA 1.0、DB2

+1

環境についての考え方が、何 'MERGE'文のユースケースのような音に記載されています。 DB2の変種を示すために、ドキュメンテーションの参照を含んでいましたが、タグの記載やタグは含まれていませんでした。 – CRPence

+0

本当に「唯一の」1500レコードですか?またはそれは15000または150000レコードになる可能性がありますか? –

答えて

-2

あなたは

// PKとしてテーブルにINSERT (A、B、C)の値を仮定(1,2以下のようにMySQLでクエリを書くことができます、3) 重複キー更新でc = c + 1、b = b + 1; ここでアップデートが実行されます

はリンクの下にhttp://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html

+0

OPは、(a)MySQLではなくDB2を使用しており、(b)SQLで表現されたソリューションではなくJPAソリューションを探している –

0

を参照してください= 1としてPKを持つレコードがすでに存在しているときには、DB2のバージョンを使用すると、システムに指定されていません。 MERGE文は、あなたのDBで使用可能な場合はとにかく、チェック:

LUW 9.5.0から:http://www.ibm.com/support/knowledgecenter/SSEPGG_9.5.0/com.ibm.db2.luw.sql.ref.doc/doc/r0010873.html

Z/OSを10.0.0から:http://www.ibm.com/support/knowledgecenter/SSEPEK_10.0.0/sqlref/src/tpc/db2z_sql_merge.html

もう一つの方法は、すべての上に挿入+削除を行うことですレコード(パフォーマンスが悪い)。

第3のオプションは、更新する予定のデータからリストされたID/KEY in where句を使用して動的1つのdelete文を作成し、削除してすべてのデータを挿入することです。

すべてのオプションのパフォーマンステーブルの仕様に依存します、インデックスなど

関連する問題