executeUpdate返回行数而不是受影响的行

时间:2017-10-31 09:02:45

标签: java sql prepared-statement execute

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而不是受影响的行数,在我运行的情况下是none。如果他们实际更新或不更新,我就无法拨打电话。

1 个答案:

答案 0 :(得分:2)

这是正确的行为。由于您未设置WHERE,因此所有行都会受到影响。您的替换是身份的事实与DB无关。如果您确实想要受影响的行,请使用where,如下所示:

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

请注意,它会降低您的查询速度,但会减少IO,这在您的情况下可能会更好。