diff --git a/src/main/java/com/alibaba/druid/pool/DruidPooledStatement.java b/src/main/java/com/alibaba/druid/pool/DruidPooledStatement.java index a270bb7a39..e60a2da6db 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidPooledStatement.java +++ b/src/main/java/com/alibaba/druid/pool/DruidPooledStatement.java @@ -288,7 +288,9 @@ public class DruidPooledStatement extends PoolableWrapper implements Statement { public void close() throws SQLException { if (!this.closed) { clearResultSet(); - stmt.close(); + if (stmt != null) { + stmt.close(); + } this.closed = true; if (conn.getConnectionHolder() != null) { diff --git a/src/main/java/com/alibaba/druid/proxy/jdbc/PreparedStatementProxyImpl.java b/src/main/java/com/alibaba/druid/proxy/jdbc/PreparedStatementProxyImpl.java index 2a562932a7..1eed3428c1 100644 --- a/src/main/java/com/alibaba/druid/proxy/jdbc/PreparedStatementProxyImpl.java +++ b/src/main/java/com/alibaba/druid/proxy/jdbc/PreparedStatementProxyImpl.java @@ -47,7 +47,7 @@ import com.alibaba.druid.proxy.jdbc.JdbcParameter.TYPE; */ public class PreparedStatementProxyImpl extends StatementProxyImpl implements PreparedStatementProxy { - protected final PreparedStatement statement; + private PreparedStatement statement; protected final String sql; private JdbcParameter[] parameters = new JdbcParameter[16]; private int parametersSize = 0; @@ -70,6 +70,11 @@ public class PreparedStatementProxyImpl extends StatementProxyImpl implements Pr return paramMap; } + protected void setStatement(PreparedStatement statement) { + super.statement = statement; + this.statement = statement; + } + void setParameter(int jdbcIndex, JdbcParameter parameter) { int index = jdbcIndex - 1; diff --git a/src/main/java/com/alibaba/druid/proxy/jdbc/StatementProxyImpl.java b/src/main/java/com/alibaba/druid/proxy/jdbc/StatementProxyImpl.java index ab9f2d2e67..9092246756 100644 --- a/src/main/java/com/alibaba/druid/proxy/jdbc/StatementProxyImpl.java +++ b/src/main/java/com/alibaba/druid/proxy/jdbc/StatementProxyImpl.java @@ -35,7 +35,7 @@ import com.alibaba.druid.stat.JdbcSqlStat; public class StatementProxyImpl extends WrapperProxyImpl implements StatementProxy { private final ConnectionProxy connection; - private final Statement statement; + protected Statement statement; protected String lastExecuteSql; protected long lastExecuteStartNano; @@ -94,6 +94,10 @@ public class StatementProxyImpl extends WrapperProxyImpl implements StatementPro @Override public void cancel() throws SQLException { + if (this.statement == null) { + return; + } + FilterChainImpl chain = createChain(); chain.statement_cancel(this); recycleFilterChain(chain); @@ -101,6 +105,10 @@ public class StatementProxyImpl extends WrapperProxyImpl implements StatementPro @Override public void clearBatch() throws SQLException { + if (this.statement == null) { + return; + } + if (batchSqlList == null) { batchSqlList = new ArrayList(); } @@ -113,6 +121,10 @@ public class StatementProxyImpl extends WrapperProxyImpl implements StatementPro @Override public void clearWarnings() throws SQLException { + if (this.statement == null) { + return; + } + FilterChainImpl chain = createChain(); chain.statement_clearWarnings(this); recycleFilterChain(chain); @@ -120,6 +132,10 @@ public class StatementProxyImpl extends WrapperProxyImpl implements StatementPro @Override public void close() throws SQLException { + if (this.statement == null) { + return; + } + FilterChainImpl chain = createChain(); chain.statement_close(this); recycleFilterChain(chain);