From 5ba7b974517501401d3ff0b8ad31af2c396aa67e Mon Sep 17 00:00:00 2001 From: wenshao Date: Thu, 30 Jun 2011 09:12:32 +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@328 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../alibaba/druid/pool/PoolableResultSet.java | 21 +++++++++++++++++++ .../druid/pool/benckmark/Oracle_Case3.java | 1 + 2 files changed, 22 insertions(+) diff --git a/src/main/java/com/alibaba/druid/pool/PoolableResultSet.java b/src/main/java/com/alibaba/druid/pool/PoolableResultSet.java index 26d8748a9b..08e945ccdb 100644 --- a/src/main/java/com/alibaba/druid/pool/PoolableResultSet.java +++ b/src/main/java/com/alibaba/druid/pool/PoolableResultSet.java @@ -21,6 +21,7 @@ import java.math.BigDecimal; import java.sql.Array; import java.sql.Blob; import java.sql.Clob; +import java.sql.Driver; import java.sql.NClob; import java.sql.Ref; import java.sql.ResultSet; @@ -1365,6 +1366,26 @@ public final class PoolableResultSet extends PoolableWrapper implements ResultSe return true; } + Driver driver = null; + { + PoolableConnection conn = stmt.getPoolableConnection(); + 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 rs.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 68b03ead8b..671c3ec718 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 @@ -96,6 +96,7 @@ public class Oracle_Case3 extends TestCase { Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT 1 FROM DUAL"); rs.next(); + Assert.isTrue(!rs.isClosed()); rs.close(); Assert.isTrue(!stmt.isClosed()); stmt.close();