2014-06-22 4 views
0

일괄 업데이트 쿼리를 사용하려고합니다. 그러나 각 업데이트 쿼리는 다르지만 같은 테이블에서 실행됩니다. Where 절은 동일합니다.스프링을 사용하여 일괄 업데이트

TABLE : 열 A, B, C, D, I 스프링 JDBC (JdbcTemplate을하고 JDBCNamedParameter) 조사한

update A where ID=1 
update B,C where ID=1 
update D,B where ID=1 and so on ... (all the combinations of A,B,C,D) 

ID 및 QueryDsl하지만 불가능 가지고 그러한 업데이트 예

.

배치와 같은 업데이트가 가능한 다른 방법이 있습니까? 나는 Spring-JDBC에 충실했다.

답변

0

각 업데이트에 대한 인수를 전달하는 준비된 문을 사용 하시겠습니까? 그렇다면 배치로 처리 할 수 ​​없습니다. 여러 문을 일괄 처리 할 수 ​​있지만 인수에 자리 표시자를 사용하지 않고 이러한 문을 만들어야합니다. 이 시나리오에서는 int[] JdbcTemplate.batchUpdate(String[] sql) 메서드 (http://docs.spring.io/spring/docs/4.0.3.RELEASE/javadoc-api/org/springframework/jdbc/core/JdbcTemplate.html#batchUpdate-java.lang.String:A-)를 사용합니다.

JDBC API를 사용하여 준비된 다른 명령문을 일괄 처리 할 수 ​​없습니다. 인수없이 (http://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#addBatch(java.lang.String)) 개별 문을 일괄 처리하거나 준비된 문 (http://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html#addBatch())에 대해 여러 인수를 일괄 처리 할 수 ​​있지만 SQL 문은 모든 인수 집합에 대해 동일해야합니다.

트랜잭션에서 여러 개의 업데이트 호출을 래핑 할 수 있지만 데이터베이스 서버로의 왕복 이동은 여러 번 이루어집니다.

0

저장 프로 시저로 업데이트를 래핑 할 수 있으며 데이터베이스로 왕복 배치 할 수 있습니다.

저장된 프로 시저 내부에서 전달 된 인수를 기반으로 업데이트를 생성해야합니다. 따라서 null을 테스트하거나 각 열에 별도의 플래그를 전달할 수 있습니다. 플래그가 설정된 경우 해당 열을 업데이트하는 SQL을 생성합니다.