2016-03-20 30 views
0

Hazırladığım ifadeleri kullanmama izin verilen eski bir kodum var. Yay JDBC ve güncelleştirme sorgusu kullanıyor. Gereksinim 100.000 satırı güncellemektir. Satır numarasına ve belirli bir sütunda güncellenmesi gereken değere sahip bir Harita var. Ben döngü i DB hit tek onu yürütebileceği sonra böylece toplu olarak yürütmek için bu değiştirmeniz gerekirSpring JDBC toplu güncelleştirme sorgusu hazır ifadeler olmadan

  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); 
     } 

:

İşte benim şimdiki kodudur.

Bu gereksinim için yay JDBC toplu güncelleştirmesinin kullanılmasının en iyi yolu nedir?

+0

yardımcı

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); 

Umut Neden hazır deyimleri kullanmaya izin verilmez? 100 bin bireysel güncellemenin çalıştırılması, aynı hazır ifadenin 100k kez çalıştırılmasından çok daha yavaş olacaktır. Ayrıca, 100k'lık bir parti boyutu biraz fazla görünüyor; Toplamı 500/1000 satırlık gruplara ayırmak daha iyi bir fikir olabilir. –

+0

Sorgu zaten bir başkası tarafından yazılmıştır ve bunu güncellemem gerekiyor. – amitmah

cevap

1

Her şeyi okuyup nesne dizisi listesine dönüştürüp batchUpdate'i çalıştırırdım.

+0

Bu gereksinim için sorguyu güncellemem gerekiyor, sorgulama dizesine harici modülden okunduğundan erişemiyorum. Sorgu '?' Olduğu sürece – amitmah

+0

Yer tutucu iyi olmalı ... ör. tbContact set firstname =?, lastname =? – malatasf

+0

Teşekkürler, çalışabilir miyim diye kontrol edeyim. Yardım için teşekkürler. – amitmah

İlgili konular