2017-10-31 17 views
1
PreparedStatement updatestmt1 = con.prepareStatement("update BASE_TX set tx_vl=replace(tx_vl,?,?)"); 
        updatestmt1.setString(1, "${parm:"+ stringToreplace.trim() +"}"); 
        updatestmt1.setString(2, "${parm:" + replacedString.trim() + "}"); 

        int ifUpdated1 = updatestmt1.executeUpdate(); 

ifUpdated1은 실행중인 경우 영향을받지 않는 행 수가 아닌 14480을 반환합니다. 따라서 실제로 업데이트되거나 업데이트되지 않으면 전화를 걸 수 없습니다.executeUpdate 영향을받는 행이 아닌 행의 수를 반환합니다.

+0

네, 그게해야 할 일입니다. 당신이 뭔가 다른 것을 세길 원한다면'where' 절을 추가 할 필요가 있습니다. –

답변

2

올바른 동작입니다. WHERE을 설정하지 않았기 때문에 모든 행이 영향을받습니다. 귀하의 교체가 신원이라는 사실은 DB와 관련이 없습니다. 그것은 당신의 쿼리를 느리게,하지만 실제로 귀하의 경우 더 좋을 수있는, IO를 줄일 수 있다는

"update BASE_TX set tx_vl=replace(tx_vl,?,?) where tx_vl != replace(tx_vl,?,?)"

참고 : 당신은 정말, 영향을받는 행을 얻을 같은 where을 사용합니다.

+0

IO는 어떻게 감소합니까? –