@@ -85,7 +85,7 @@ int[] batchUpdate(String sql, SqlParameterSource[] batchArgs, KeyHolder generate
85
85
* @see org.springframework.jdbc.support.GeneratedKeyHolder
86
86
* @since 2.4
87
87
*/
88
- public int [] batchUpdate (String sql , SqlParameterSource [] batchArgs , KeyHolder generatedKeyHolder ,
88
+ int [] batchUpdate (String sql , SqlParameterSource [] batchArgs , KeyHolder generatedKeyHolder ,
89
89
@ Nullable String [] keyColumnNames ) {
90
90
91
91
if (batchArgs .length == 0 ) {
@@ -118,22 +118,23 @@ public int getBatchSize() {
118
118
};
119
119
PreparedStatementCallback <int []> preparedStatementCallback = ps -> {
120
120
int batchSize = bpss .getBatchSize ();
121
+ generatedKeyHolder .getKeyList ().clear ();
121
122
if (JdbcUtils .supportsBatchUpdates (ps .getConnection ())) {
122
123
for (int i = 0 ; i < batchSize ; i ++) {
123
124
bpss .setValues (ps , i );
124
125
ps .addBatch ();
125
126
}
126
127
int [] results = ps .executeBatch ();
127
- storeGeneratedKeys (generatedKeyHolder ). doInPreparedStatement ( ps );
128
+ storeGeneratedKeys (generatedKeyHolder , ps );
128
129
return results ;
129
130
} else {
130
131
List <Integer > rowsAffected = new ArrayList <>();
131
132
for (int i = 0 ; i < batchSize ; i ++) {
132
133
bpss .setValues (ps , i );
133
134
rowsAffected .add (ps .executeUpdate ());
135
+ storeGeneratedKeys (generatedKeyHolder , ps );
134
136
}
135
137
int [] rowsAffectedArray = new int [rowsAffected .size ()];
136
- storeGeneratedKeys (generatedKeyHolder ).doInPreparedStatement (ps );
137
138
for (int i = 0 ; i < rowsAffectedArray .length ; i ++) {
138
139
rowsAffectedArray [i ] = rowsAffected .get (i );
139
140
}
@@ -145,24 +146,20 @@ public int getBatchSize() {
145
146
return result ;
146
147
}
147
148
148
- private PreparedStatementCallback < Void > storeGeneratedKeys (KeyHolder generatedKeyHolder ) {
149
+ private void storeGeneratedKeys (KeyHolder generatedKeyHolder , PreparedStatement ps ) throws SQLException {
149
150
150
- return ps -> {
151
- List <Map <String , Object >> generatedKeys = generatedKeyHolder .getKeyList ();
152
- generatedKeys .clear ();
153
- ResultSet keys = ps .getGeneratedKeys ();
154
- if (keys != null ) {
155
- try {
156
- RowMapperResultSetExtractor <Map <String , Object >> rse =
157
- new RowMapperResultSetExtractor <>(new ColumnMapRowMapper (), 1 );
158
- //noinspection ConstantConditions
159
- generatedKeys .addAll (rse .extractData (keys ));
160
- }
161
- finally {
162
- JdbcUtils .closeResultSet (keys );
163
- }
151
+ List <Map <String , Object >> generatedKeys = generatedKeyHolder .getKeyList ();
152
+ ResultSet keys = ps .getGeneratedKeys ();
153
+ if (keys != null ) {
154
+ try {
155
+ RowMapperResultSetExtractor <Map <String , Object >> rse =
156
+ new RowMapperResultSetExtractor <>(new ColumnMapRowMapper (), 1 );
157
+ //noinspection ConstantConditions
158
+ generatedKeys .addAll (rse .extractData (keys ));
164
159
}
165
- return null ;
166
- };
160
+ finally {
161
+ JdbcUtils .closeResultSet (keys );
162
+ }
163
+ }
167
164
}
168
165
}
0 commit comments