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();