From 76f0761858b3ece6b7ebb57fe8cc79234fef236d Mon Sep 17 00:00:00 2001 From: wenshao Date: Thu, 30 Jun 2011 09:10:23 +0000 Subject: [PATCH] =?UTF-8?q?=E5=85=BC=E5=AE=B9Oracle=2010.x=20Driver?= 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@327 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../alibaba/druid/pool/PoolableStatement.java | 20 +++++++++++++++++++ .../druid/pool/benckmark/Oracle_Case3.java | 3 +++ 2 files changed, 23 insertions(+) diff --git a/src/main/java/com/alibaba/druid/pool/PoolableStatement.java b/src/main/java/com/alibaba/druid/pool/PoolableStatement.java index 60f0f4d956..5de54918d2 100644 --- a/src/main/java/com/alibaba/druid/pool/PoolableStatement.java +++ b/src/main/java/com/alibaba/druid/pool/PoolableStatement.java @@ -16,6 +16,7 @@ package com.alibaba.druid.pool; import java.sql.Connection; +import java.sql.Driver; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.SQLWarning; @@ -419,6 +420,25 @@ public class PoolableStatement extends PoolableWrapper implements Statement { return true; } + Driver driver = null; + { + ConnectionHolder holder = conn.getConnectionHolder(); + if (holder != null) { + DruidAbstractDataSource dataSource = holder.getDataSource(); + if (dataSource != null) { + driver = dataSource.getDriver(); + } + } + } + // Oracle Driver 10.x is JDBC 3.0 + if (driver != null) { + if ("oracle.jdbc.driver.OracleDriver".equals(driver.getClass().getName())) { + if (driver.getMajorVersion() <= 10) { + return closed; + } + } + } + try { return stmt.isClosed(); } catch (Throwable t) { diff --git a/src/test/java/com/alibaba/druid/pool/benckmark/Oracle_Case3.java b/src/test/java/com/alibaba/druid/pool/benckmark/Oracle_Case3.java index be61ef843b..68b03ead8b 100644 --- a/src/test/java/com/alibaba/druid/pool/benckmark/Oracle_Case3.java +++ b/src/test/java/com/alibaba/druid/pool/benckmark/Oracle_Case3.java @@ -11,6 +11,7 @@ import javax.sql.DataSource; import junit.framework.TestCase; import org.apache.commons.dbcp.BasicDataSource; +import org.springframework.util.Assert; import com.alibaba.druid.TestUtil; import com.alibaba.druid.pool.DruidDataSource; @@ -96,7 +97,9 @@ public class Oracle_Case3 extends TestCase { ResultSet rs = stmt.executeQuery("SELECT 1 FROM DUAL"); rs.next(); rs.close(); + Assert.isTrue(!stmt.isClosed()); stmt.close(); + Assert.isTrue(stmt.isClosed()); conn.close(); } } catch (Exception ex) {