Skip to content

Commit 2c88444

Browse files
author
huaangcg
committed
[fix][worker]fix statement is closed before resultSet.getMetaData()
1 parent 7b66862 commit 2c88444

1 file changed

Lines changed: 18 additions & 9 deletions

File tree

  • dolphinscheduler-task-plugin/dolphinscheduler-task-sql/src/main/java/org/apache/dolphinscheduler/plugin/task/sql

dolphinscheduler-task-plugin/dolphinscheduler-task-sql/src/main/java/org/apache/dolphinscheduler/plugin/task/sql/SqlTask.java

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@ public void executeFuncAndSql(List<SqlBinds> mainStatementsBinds,
180180
List<String> createFuncs) throws Exception {
181181
Connection connection = null;
182182
ResultSet resultSet = null;
183+
PreparedStatement statement = null;
183184
try {
184185

185186
// create connection
@@ -196,8 +197,10 @@ public void executeFuncAndSql(List<SqlBinds> mainStatementsBinds,
196197
String result = null;
197198
// decide whether to executeQuery or executeUpdate based on sqlType
198199
if (sqlParameters.getSqlType() == SqlType.QUERY.ordinal()) {
199-
// query statements need to be convert to JsonArray and inserted into Alert to send
200-
resultSet = executeQuery(connection, mainStatementsBinds.get(0), "main");
200+
// query statements need to be converted to JsonArray and inserted into Alert to send
201+
// statement must close after resultProcess
202+
statement = prepareStatementAndBind(connection, mainStatementsBinds.get(0));
203+
resultSet = executeQuery(mainStatementsBinds.get(0), "main", statement);
201204
result = resultProcess(resultSet);
202205
} else if (sqlParameters.getSqlType() == SqlType.NON_QUERY.ordinal()) {
203206
// non query statement
@@ -213,7 +216,7 @@ public void executeFuncAndSql(List<SqlBinds> mainStatementsBinds,
213216
logger.error("execute sql error: {}", e.getMessage());
214217
throw e;
215218
} finally {
216-
close(resultSet, connection);
219+
close(resultSet, statement, connection);
217220
}
218221
}
219222

@@ -292,11 +295,9 @@ private void sendAttachment(int groupId, String title, String content) {
292295
setTaskAlertInfo(taskAlertInfo);
293296
}
294297

295-
private ResultSet executeQuery(Connection connection, SqlBinds sqlBinds, String handlerType) throws Exception {
296-
try (PreparedStatement statement = prepareStatementAndBind(connection, sqlBinds)) {
297-
logger.info("{} statement execute query, for sql: {}", handlerType, sqlBinds.getSql());
298-
return statement.executeQuery();
299-
}
298+
private ResultSet executeQuery(SqlBinds sqlBinds, String handlerType, PreparedStatement statement) throws Exception {
299+
logger.info("{} statement execute query, for sql: {}", handlerType, sqlBinds.getSql());
300+
return statement.executeQuery();
300301
}
301302

302303
private String executeUpdate(Connection connection, List<SqlBinds> statementsBinds, String handlerType) throws Exception {
@@ -332,7 +333,7 @@ private void createTempFunction(Connection connection,
332333
* @param resultSet resultSet
333334
* @param connection connection
334335
*/
335-
private void close(ResultSet resultSet, Connection connection) {
336+
private void close(ResultSet resultSet, PreparedStatement pstmt, Connection connection) {
336337
if (resultSet != null) {
337338
try {
338339
resultSet.close();
@@ -341,6 +342,14 @@ private void close(ResultSet resultSet, Connection connection) {
341342
}
342343
}
343344

345+
if (pstmt != null) {
346+
try {
347+
pstmt.close();
348+
} catch (SQLException e) {
349+
logger.error("close prepared statement error : {}", e.getMessage(), e);
350+
}
351+
}
352+
344353
if (connection != null) {
345354
try {
346355
connection.close();

0 commit comments

Comments
 (0)