From b4b18ea3609b8e668968b87574d66bba36b3a956 Mon Sep 17 00:00:00 2001 From: wenshao Date: Mon, 6 Aug 2012 20:11:32 +0800 Subject: [PATCH] bug fixed pooledStatementStat --- .../proxy/jdbc/PreparedStatementProxyImpl.java | 10 ++++++++++ .../com/alibaba/druid/stat/JdbcDataSourceStat.java | 1 + .../java/com/alibaba/druid/stat/JdbcSqlStat.java | 13 ++++++++++++- 3 files changed, 23 insertions(+), 1 deletion(-) 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 7e9984094c..ded11732b6 100644 --- a/src/main/java/com/alibaba/druid/proxy/jdbc/PreparedStatementProxyImpl.java +++ b/src/main/java/com/alibaba/druid/proxy/jdbc/PreparedStatementProxyImpl.java @@ -40,6 +40,7 @@ import java.util.Map; import java.util.TreeMap; import com.alibaba.druid.proxy.jdbc.JdbcParameter.TYPE; +import com.alibaba.druid.stat.JdbcSqlStat; /** * @author wenshao @@ -465,4 +466,13 @@ public class PreparedStatementProxyImpl extends StatementProxyImpl implements Pr return super.unwrap(iface); } + + public JdbcSqlStat getSqlStat() { + if (sqlStat.isRemoved()) { + JdbcSqlStat sqlStat = this.getConnectionProxy().getDirectDataSource().getDataSourceStat().getSqlStat(sql); + sqlStat.setDbType(this.sqlStat.getDbType()); + this.sqlStat = sqlStat; + } + return sqlStat; + } } diff --git a/src/main/java/com/alibaba/druid/stat/JdbcDataSourceStat.java b/src/main/java/com/alibaba/druid/stat/JdbcDataSourceStat.java index fae0d82635..543302719d 100644 --- a/src/main/java/com/alibaba/druid/stat/JdbcDataSourceStat.java +++ b/src/main/java/com/alibaba/druid/stat/JdbcDataSourceStat.java @@ -110,6 +110,7 @@ public class JdbcDataSourceStat implements JdbcDataSourceStatMBean { Map.Entry entry = iter.next(); JdbcSqlStat stat = entry.getValue(); if (stat.getExecuteCount() == 0 && stat.getRunningCount() == 0) { + stat.setRemoved(true); iter.remove(); } else { stat.reset(); diff --git a/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java b/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java index bb62006916..fe6dd287f8 100644 --- a/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java +++ b/src/main/java/com/alibaba/druid/stat/JdbcSqlStat.java @@ -64,6 +64,8 @@ public final class JdbcSqlStat implements JdbcSqlStatMBean { private String lastSlowParameters; + private boolean removed = false; + private final Histogram histogram = new Histogram(new long[] { // // 1, 10, 100, 1000, 10 * 1000, // @@ -84,7 +86,7 @@ public final class JdbcSqlStat implements JdbcSqlStatMBean { private final Histogram updateCountHistogram = new Histogram(new long[] { // 1, 10, 100, 1000, 10 * 1000 }); - public JdbcSqlStat(String sql) { + public JdbcSqlStat(String sql){ this.sql = sql; this.id = DruidDriver.createSqlStatId(); } @@ -621,4 +623,13 @@ public final class JdbcSqlStat implements JdbcSqlStatMBean { executeAndResultHoldTimeHistogram.record((statementExecuteNano + resultHoldTimeNano) / 1000 / 1000); updateCountHistogram.record(0); } + + public boolean isRemoved() { + return removed; + } + + public void setRemoved(boolean removed) { + this.removed = removed; + } + }