diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index dc03bcf67e..6700927cb9 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -172,6 +172,10 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat for (int i = 0; i < poolingCount; ++i) { ConnectionHolder connection = connections[i]; + for (PreparedStatementHolder holder : connection.getStatementPool().getMap().values()) { + JdbcUtils.close(holder.getStatement()); + } + connection.getStatementPool().getMap().clear(); } } diff --git a/src/main/java/com/alibaba/druid/pool/PreparedStatementPool.java b/src/main/java/com/alibaba/druid/pool/PreparedStatementPool.java index 57680d4710..5694416685 100644 --- a/src/main/java/com/alibaba/druid/pool/PreparedStatementPool.java +++ b/src/main/java/com/alibaba/druid/pool/PreparedStatementPool.java @@ -20,6 +20,7 @@ import java.util.Map; import java.util.Map.Entry; import com.alibaba.druid.pool.PoolablePreparedStatement.PreparedStatementKey; +import com.alibaba.druid.util.JdbcUtils; /** * @author wenshao @@ -54,7 +55,10 @@ public class PreparedStatementPool { public void put(PreparedStatementHolder holder) { PreparedStatementKey key = holder.getKey(); - map.put(key, holder); + PreparedStatementHolder oldHolder = map.put(key, holder); + if (oldHolder != null) { + JdbcUtils.close(oldHolder.getStatement()); + } } public Map getMap() {