2016-03-20 10 views
0

私はプリペアドステートメントを使用することが許可されていないレガシーコードを使用しています。 Spring JDBCと更新クエリを使用しています。要件は、100,000行を更新することです。 私は行番号と特定の列で更新​​する必要がある値を持つマップを持っています。ここでプリペアドステートメントを使用しないSpring JDBCバッチ更新クエリ

は私の現在のコードです:

  for(String seq: recordIdMap.keySet()){ 

      Object[] parameters = new Object[2]; 
      parameters[0] = seq; 
      parameters[1] = recordIdMap.get(seq); 
//<setting the params in query using manual string replace- earlier query has (1) (2) ... in query . This is not prepared statement> 
       getJdbcTemplate().update(query); 
     } 

私はループの後、私は、単一のDBヒットでそれを実行できるように、バッチとして実行するために、これを変更する必要があります。

この要件にSpring JDBCバッチ更新を使用する最良の方法は何ですか?

+0

を助け

List<Object[]> params = new ArrayList<Object[]>(); for(Entry<String,String> entry : recordIdMap.entrySet()) params.add(new Object[] {entry.getKey(), entry.getValue()}); getJdbcTemplate().batchUpdate(query, params); 

希望はなぜあなたはプリペアドステートメントを使用することはできませんか? 100k個の個別の更新を実行することは、同じ準備済みの文を100k回実行するよりもはるかに遅くなります。また、100kのバッチサイズは多すぎるようです。合計を500/1000行のバッチに分割する方が良い考えです。 –

+0

クエリは既に他の人によって書かれており、私はそれを更新するつもりはありません。 – amitmah

答えて

1

私はすべてを読んで、それをオブジェクト配列のリストに変換し、次にbatchUpdateを実行します。

+0

この要件のクエリを更新する必要がありますが、外部モジュールから読み取ったクエリ文字列にはアクセスできません。 – amitmah

+0

の場合、クエリに '?'それはうまくいくはずです...。 update tbContact firstname =?、lastname =? – malatasf

+0

ありがとう、私はそれを動作させることができます確認してみましょう。助けてくれてありがとう。 – amitmah

関連する問題