From 3e0482da51283e6989347e8ef3aaa6ebbcab1161 Mon Sep 17 00:00:00 2001 From: wenshao Date: Tue, 19 Jul 2011 08:03:02 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3close=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://code.alibabatech.com/svn/druid/trunk@476 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../druid/pool/PoolableConnection.java | 64 +++++++++++-------- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/PoolableConnection.java b/src/main/java/com/alibaba/druid/pool/PoolableConnection.java index caf31bc640..4149b21dd7 100644 --- a/src/main/java/com/alibaba/druid/pool/PoolableConnection.java +++ b/src/main/java/com/alibaba/druid/pool/PoolableConnection.java @@ -303,7 +303,7 @@ public class PoolableConnection implements PooledConnection, Connection { return poolableStatement; } } - + PreparedStatement stmt = conn.prepareStatement(sql, autoGeneratedKeys); holder.getDataSource().initStatement(stmt); @@ -321,72 +321,82 @@ public class PoolableConnection implements PooledConnection, Connection { public CallableStatement prepareCall(String sql) throws SQLException { checkOpen(); - if (holder.isPoolPreparedStatements()) { - PreparedStatementKey key = new PreparedStatementKey(sql, getCatalog(), MethodType.Precall_1); + PreparedStatementKey key = new PreparedStatementKey(sql, getCatalog(), MethodType.Precall_1); + if (holder.isPoolPreparedStatements()) { PoolableCallableStatement poolableStatement = (PoolableCallableStatement) holder.getStatementPool().get(key); if (poolableStatement != null) { poolableStatement.setPoolableConnection(this); + poolableStatement.setClosed(false); + holder.addTrace(poolableStatement); return poolableStatement; } - - CallableStatement stmt = conn.prepareCall(sql); - - holder.getDataSource().initStatement(stmt); - - return new PoolableCallableStatement(this, stmt, key); } - return conn.prepareCall(sql); + CallableStatement stmt = conn.prepareCall(sql); + + holder.getDataSource().initStatement(stmt); + + CallableStatement rtnVal = new PoolableCallableStatement(this, stmt, key); + + holder.addTrace(rtnVal); + + return rtnVal; } @Override public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException { checkOpen(); + PreparedStatementKey key = new PreparedStatementKey(sql, getCatalog(), MethodType.Precall_2); if (holder.isPoolPreparedStatements()) { - PreparedStatementKey key = new PreparedStatementKey(sql, getCatalog(), MethodType.Precall_2); - PoolableCallableStatement poolableStatement = (PoolableCallableStatement) holder.getStatementPool().get(key); if (poolableStatement != null) { poolableStatement.setPoolableConnection(this); + poolableStatement.setClosed(false); + holder.addTrace(poolableStatement); return poolableStatement; } - - CallableStatement stmt = conn.prepareCall(sql, resultSetType, resultSetConcurrency, resultSetHoldability); - - holder.getDataSource().initStatement(stmt); - - return new PoolableCallableStatement(this, stmt, key); } - return conn.prepareCall(sql, resultSetType, resultSetConcurrency, resultSetHoldability); + CallableStatement stmt = conn.prepareCall(sql, resultSetType, resultSetConcurrency, resultSetHoldability); + + holder.getDataSource().initStatement(stmt); + + CallableStatement rtnVal = new PoolableCallableStatement(this, stmt, key); + + holder.addTrace(rtnVal); + + return rtnVal; } @Override public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency) throws SQLException { checkOpen(); + PreparedStatementKey key = new PreparedStatementKey(sql, getCatalog(), MethodType.Precall_3); if (holder.isPoolPreparedStatements()) { - PreparedStatementKey key = new PreparedStatementKey(sql, getCatalog(), MethodType.Precall_3); PoolableCallableStatement poolableStatement = (PoolableCallableStatement) holder.getStatementPool().get(key); if (poolableStatement != null) { poolableStatement.setPoolableConnection(this); + poolableStatement.setClosed(false); + holder.addTrace(poolableStatement); return poolableStatement; } - - CallableStatement stmt = conn.prepareCall(sql, resultSetType, resultSetConcurrency); - - holder.getDataSource().initStatement(stmt); - - return new PoolableCallableStatement(this, stmt, key); } - return conn.prepareCall(sql, resultSetType, resultSetConcurrency); + CallableStatement stmt = conn.prepareCall(sql, resultSetType, resultSetConcurrency); + + holder.getDataSource().initStatement(stmt); + + CallableStatement rtnVal = new PoolableCallableStatement(this, stmt, key); + holder.addTrace(rtnVal); + + return rtnVal; } // ////////////////////