diff --git a/README b/README
index 18d8c362f1..cd1c4dd564 100644
--- a/README
+++ b/README
@@ -1,2 +1,9 @@
+mvn install:install-file -Dfile=lib/oracle/9.2.0.8/ojdbc14_g.jar -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=9.2.0.8 -Dpackaging=jar -DgeneratePom=true
+
+mvn install:install-file -Dfile=lib/oracle/10.1.0.5/ojdbc14_g.jar -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.1.0.5 -Dpackaging=jar -DgeneratePom=true
+
+mvn install:install-file -Dfile=lib/oracle/10.2.0.2/ojdbc14_g.jar -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.2 -Dpackaging=jar -DgeneratePom=true
+mvn install:install-file -Dfile=lib/oracle/10.2.0.5/ojdbc14_g.jar -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.5 -Dpackaging=jar -DgeneratePom=true
+
mvn install:install-file -Dfile=lib/oracle/11.2.0.3/ojdbc5_g.jar -DgroupId=com.oracle -DartifactId=ojdbc5 -Dversion=11.2.0.3 -Dpackaging=jar -DgeneratePom=true
mvn install:install-file -Dfile=lib/oracle/11.2.0.3/ojdbc6_g.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.3 -Dpackaging=jar -DgeneratePom=true
\ No newline at end of file
diff --git a/lib/oracle/10.1.0.5/ojdbc14_g.jar b/lib/oracle/10.1.0.5/ojdbc14_g.jar
new file mode 100644
index 0000000000..88f4cad54e
Binary files /dev/null and b/lib/oracle/10.1.0.5/ojdbc14_g.jar differ
diff --git a/lib/oracle/10.2.0.2/ojdbc14_g.jar b/lib/oracle/10.2.0.2/ojdbc14_g.jar
new file mode 100644
index 0000000000..7837e972a5
Binary files /dev/null and b/lib/oracle/10.2.0.2/ojdbc14_g.jar differ
diff --git a/lib/oracle/10.2.0.5/ojdbc14_g.jar b/lib/oracle/10.2.0.5/ojdbc14_g.jar
new file mode 100644
index 0000000000..822349f54b
Binary files /dev/null and b/lib/oracle/10.2.0.5/ojdbc14_g.jar differ
diff --git a/lib/oracle/9.2.0.8/ojdbc14_g.jar b/lib/oracle/9.2.0.8/ojdbc14_g.jar
new file mode 100644
index 0000000000..1dc75b9dd7
Binary files /dev/null and b/lib/oracle/9.2.0.8/ojdbc14_g.jar differ
diff --git a/pom.xml b/pom.xml
index 62b060b3c2..45434bac99 100644
--- a/pom.xml
+++ b/pom.xml
@@ -170,21 +170,13 @@
1.1.1
provided
-
+
org.springframework
spring
2.0
provided
-
log4j
@@ -232,16 +224,28 @@
9.1-901-1.jdbc4
provided
-
+
-
+
+ com.oracle
+ ojdbc14
+ 10.2.0.2
+ provided
+
+
+
+ org.nutz
+ nutz
+ 1.b.40
+ test
+
junit
diff --git a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java
index 550d43c7cf..c7956f851e 100644
--- a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java
+++ b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java
@@ -211,7 +211,7 @@ public abstract class DruidAbstractDataSource extends WrapperAdapter implements
protected boolean isOracle = false;
- protected boolean useOracleImplicitCache = false;
+ protected boolean useOracleImplicitCache = true;
public boolean isOracle() {
return isOracle;
@@ -229,7 +229,16 @@ public abstract class DruidAbstractDataSource extends WrapperAdapter implements
}
public void setUseOracleImplicitCache(boolean useOracleImplicitCache) {
- this.useOracleImplicitCache = useOracleImplicitCache;
+ if (this.useOracleImplicitCache != useOracleImplicitCache) {
+ this.useOracleImplicitCache = useOracleImplicitCache;
+ boolean isOracleDriver10 = isOracle() && this.driver != null && this.driver.getMajorVersion() == 10;
+
+ if (isOracleDriver10) {
+ this.getConnectProperties().setProperty("oracle.jdbc.FreeMemoryOnEnterImplicitCache", "true");
+ } else {
+ this.getConnectProperties().remove("oracle.jdbc.FreeMemoryOnEnterImplicitCache");
+ }
+ }
}
public Throwable getLastCreateError() {
diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java
index 126aefef6d..85e7b38142 100644
--- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java
+++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java
@@ -295,6 +295,10 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
throw new SQLException("not support oracle driver " + driver.getMajorVersion() + "."
+ driver.getMinorVersion());
}
+
+ if (driver.getMajorVersion() == 10 && isUseOracleImplicitCache()) {
+ this.getConnectProperties().setProperty("oracle.jdbc.FreeMemoryOnEnterImplicitCache", "true");
+ }
}
String realDriverClassName = driver.getClass().getName();
@@ -1334,7 +1338,7 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
@Override
public String getVersion() {
- return VERSION.MajorVersion + "." + VERSION.MinorVersion + "." + VERSION.RevisionVersion + "-2011-12-27 14:45";
+ return VERSION.MajorVersion + "." + VERSION.MinorVersion + "." + VERSION.RevisionVersion + "-2012-1-6 10:14";
}
}
diff --git a/src/main/java/com/alibaba/druid/pool/vendor/MySqlValidConnectionChecker.java b/src/main/java/com/alibaba/druid/pool/vendor/MySqlValidConnectionChecker.java
index d18fd2408c..1376277236 100644
--- a/src/main/java/com/alibaba/druid/pool/vendor/MySqlValidConnectionChecker.java
+++ b/src/main/java/com/alibaba/druid/pool/vendor/MySqlValidConnectionChecker.java
@@ -1,21 +1,39 @@
package com.alibaba.druid.pool.vendor;
import java.io.Serializable;
+import java.lang.reflect.Method;
import java.sql.Connection;
+import java.sql.ResultSet;
import java.sql.SQLException;
+import java.sql.Statement;
import com.alibaba.druid.logging.Log;
import com.alibaba.druid.logging.LogFactory;
+import com.alibaba.druid.pool.DruidPooledConnection;
import com.alibaba.druid.pool.ValidConnectionChecker;
-import com.alibaba.druid.util.MySqlUtils;
+import com.alibaba.druid.proxy.jdbc.ConnectionProxy;
+import com.alibaba.druid.util.DruidLoaderUtils;
+import com.alibaba.druid.util.JdbcUtils;
public class MySqlValidConnectionChecker implements ValidConnectionChecker, Serializable {
- private static final long serialVersionUID = 1L;
- private static final Log LOG = LogFactory.getLog(MySqlValidConnectionChecker.class);
+ private static final long serialVersionUID = 1L;
+ private static final Log LOG = LogFactory.getLog(MySqlValidConnectionChecker.class);
+
+ private Class> clazz;
+ private Method ping;
+ private boolean driverHasPingMethod = false;
public MySqlValidConnectionChecker(){
-
+ try {
+ clazz = DruidLoaderUtils.loadClass("com.mysql.jdbc.Connection");
+ ping = clazz.getMethod("ping");
+ if (ping != null) {
+ driverHasPingMethod = true;
+ }
+ } catch (Exception e) {
+ LOG.warn("Cannot resolve com.mysq.jdbc.Connection.ping method. Will use 'SELECT 1' instead.", e);
+ }
}
public boolean isValidConnection(Connection conn, String valiateQuery, int validationQueryTimeout) {
@@ -32,12 +50,41 @@ public class MySqlValidConnectionChecker implements ValidConnectionChecker, Seri
return true;
}
+ if (driverHasPingMethod) {
+ if (conn instanceof DruidPooledConnection) {
+ conn = ((DruidPooledConnection) conn).getConnection();
+ }
+
+ if (conn instanceof ConnectionProxy) {
+ conn = ((ConnectionProxy) conn).getRawObject();
+ }
+
+ if (clazz.isAssignableFrom(conn.getClass())) {
+ try {
+ ping.invoke(conn);
+ return true;
+ } catch (Exception e) {
+ LOG.warn("Unexpected error in ping", e);
+ return false;
+ }
+ }
+ }
+
+ Statement stmt = null;
+ ResultSet rs = null;
try {
- MySqlUtils.ping(conn);
+ stmt = conn.createStatement();
+ stmt.setQueryTimeout(validationQueryTimeout);
+ rs = stmt.executeQuery(valiateQuery);
return true;
+ } catch (SQLException e) {
+ return false;
} catch (Exception e) {
LOG.warn("Unexpected error in ping", e);
return false;
+ } finally {
+ JdbcUtils.close(rs);
+ JdbcUtils.close(stmt);
}
}
diff --git a/src/main/java/com/alibaba/druid/pool/vendor/OracleValidConnectionChecker.java b/src/main/java/com/alibaba/druid/pool/vendor/OracleValidConnectionChecker.java
index ff0d70b283..1cc8eaf82b 100644
--- a/src/main/java/com/alibaba/druid/pool/vendor/OracleValidConnectionChecker.java
+++ b/src/main/java/com/alibaba/druid/pool/vendor/OracleValidConnectionChecker.java
@@ -22,24 +22,37 @@
package com.alibaba.druid.pool.vendor;
import java.io.Serializable;
+import java.lang.reflect.Method;
import java.sql.Connection;
+import java.sql.ResultSet;
import java.sql.SQLException;
+import java.sql.Statement;
import com.alibaba.druid.logging.Log;
import com.alibaba.druid.logging.LogFactory;
import com.alibaba.druid.pool.DruidPooledConnection;
import com.alibaba.druid.pool.ValidConnectionChecker;
import com.alibaba.druid.proxy.jdbc.ConnectionProxy;
-import com.alibaba.druid.util.OracleUtils;
+import com.alibaba.druid.util.DruidLoaderUtils;
+import com.alibaba.druid.util.JdbcUtils;
public class OracleValidConnectionChecker implements ValidConnectionChecker, Serializable {
- private static final long serialVersionUID = -2227528634302168877L;
+ private static final long serialVersionUID = -2227528634302168877L;
- private static final Log LOG = LogFactory.getLog(OracleValidConnectionChecker.class);
+ private static final Log LOG = LogFactory.getLog(OracleValidConnectionChecker.class);
+
+ private final Class> clazz;
+ private final Method ping;
+ private final static Object[] params = new Object[] { new Integer(5000) };
public OracleValidConnectionChecker(){
-
+ try {
+ clazz = DruidLoaderUtils.loadClass("oracle.jdbc.driver.OracleConnection");
+ ping = clazz.getMethod("pingDatabase", new Class[] { Integer.TYPE });
+ } catch (Exception e) {
+ throw new RuntimeException("Unable to resolve pingDatabase method:", e);
+ }
}
public boolean isValidConnection(Connection conn, String valiateQuery, int validationQueryTimeout) {
@@ -65,14 +78,33 @@ public class OracleValidConnectionChecker implements ValidConnectionChecker, Ser
conn = ((ConnectionProxy) conn).getRawObject();
}
- int status = OracleUtils.pingDatabase(conn);
+ // unwrap
+ if (clazz.isAssignableFrom(conn.getClass())) {
+ Integer status = (Integer) ping.invoke(conn, params);
- // Error
- if (status < 0) {
- return false;
+ // Error
+ if (status.intValue() < 0) {
+ return false;
+ }
+
+ return true;
}
- return true;
+ Statement stmt = null;
+ ResultSet rs = null;
+ try {
+ stmt = conn.createStatement();
+ rs = stmt.executeQuery(valiateQuery);
+ return true;
+ } catch (SQLException e) {
+ return false;
+ } catch (Exception e) {
+ LOG.warn("Unexpected error in ping", e);
+ return false;
+ } finally {
+ JdbcUtils.close(rs);
+ JdbcUtils.close(stmt);
+ }
} catch (Exception e) {
LOG.warn("Unexpected error in pingDatabase", e);
}
diff --git a/src/main/java/com/alibaba/druid/util/OracleUtils.java b/src/main/java/com/alibaba/druid/util/OracleUtils.java
index d0cd5b70a7..981d133f75 100644
--- a/src/main/java/com/alibaba/druid/util/OracleUtils.java
+++ b/src/main/java/com/alibaba/druid/util/OracleUtils.java
@@ -88,7 +88,6 @@ public class OracleUtils {
oracleConn.setStatementCacheSize(size);
}
- @SuppressWarnings("deprecation")
public static int pingDatabase(Connection conn) throws SQLException {
OracleConnection oracleConn = unwrap(conn);
return oracleConn.pingDatabase(1000);
diff --git a/src/test/java/com/alibaba/druid/TestOracle.java b/src/test/java/com/alibaba/druid/TestOracle.java
new file mode 100644
index 0000000000..0879bd400d
--- /dev/null
+++ b/src/test/java/com/alibaba/druid/TestOracle.java
@@ -0,0 +1,70 @@
+package com.alibaba.druid;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import com.alibaba.druid.pool.DruidDataSource;
+
+public class TestOracle extends TestCase {
+
+ private String jdbcUrl;
+ private String user;
+ private String password;
+ private String driverClass;
+ private String SQL;
+
+ protected void setUp() throws Exception {
+ // jdbcUrl = "jdbc:oracle:thin:@10.20.149.85:1521:ocnauto";
+ // user = "alibaba";
+ // password = "ccbuauto";
+ // SQL = "SELECT * FROM WP_ORDERS WHERE ID = ?";
+
+ jdbcUrl = "jdbc:oracle:thin:@10.20.149.81:1521:ointest3";
+ user = "alibaba";
+ password = "deYcR7facWSJtCuDpm2r";
+ SQL = "SELECT * FROM AV_INFO WHERE ID = ?";
+
+ driverClass = "oracle.jdbc.driver.OracleDriver";
+ }
+
+ public void test_o() throws Exception {
+ DruidDataSource dataSource = new DruidDataSource();
+
+ dataSource.setDriverClassName(driverClass);
+ dataSource.setUrl(jdbcUrl);
+ dataSource.setUsername(user);
+ dataSource.setPassword(password);
+ dataSource.setPoolPreparedStatements(true);
+ dataSource.setMaxOpenPreparedStatements(50);
+ dataSource.setUseOracleImplicitCache(true);
+ // dataSource.setConnectionProperties("oracle.jdbc.FreeMemoryOnEnterImplicitCache=true");
+
+ for (int i = 1; i <= 1; ++i) {
+ Connection conn = dataSource.getConnection();
+
+ int rowNum = i + 1; // (i % 50) + 1;
+ String sql = SQL + " AND ROWNUM <= " + rowNum;
+ PreparedStatement stmt = conn.prepareStatement(sql);
+ stmt.setInt(1, 61);
+ ResultSet rs = stmt.executeQuery();
+ int rowCount = 0;
+ while (rs.next()) {
+ rowCount++;
+ }
+ Assert.assertEquals(true, rowCount > 0);
+ // Assert.isTrue(!rs.isClosed());
+ rs.close();
+ // Assert.isTrue(!stmt.isClosed());
+ stmt.close();
+
+ conn.close();
+
+ }
+
+ dataSource.close();
+ }
+}
diff --git a/src/test/java/com/alibaba/druid/bvt/bug/TestRollBack.java b/src/test/java/com/alibaba/druid/bvt/bug/TestRollBack.java
new file mode 100644
index 0000000000..a80e75e6ae
--- /dev/null
+++ b/src/test/java/com/alibaba/druid/bvt/bug/TestRollBack.java
@@ -0,0 +1,105 @@
+package com.alibaba.druid.bvt.bug;
+
+import java.beans.PropertyVetoException;
+import java.sql.SQLException;
+
+import junit.framework.Assert;
+
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.nutz.dao.Chain;
+import org.nutz.dao.Cnd;
+import org.nutz.dao.Dao;
+import org.nutz.dao.Sqls;
+import org.nutz.dao.impl.NutDao;
+import org.nutz.trans.Atom;
+import org.nutz.trans.Trans;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import com.mchange.v2.c3p0.ComboPooledDataSource;
+
+public class TestRollBack {
+ static ComboPooledDataSource c3p0;
+ static DruidDataSource druid;
+ static Dao dao_c3p0;
+ static Dao dao_druid;
+
+ static String url = "jdbc:oracle:thin:@10.20.149.85:1521:ocnauto";
+ static String user = "alibaba";
+ static String password = "ccbuauto";
+
+// jdbcUrl = "jdbc:oracle:thin:@10.20.149.85:1521:ocnauto";
+// user = "alibaba";
+// password = "ccbuauto";
+
+ @BeforeClass
+ public static void init() throws PropertyVetoException, SQLException {
+ c3p0 = new ComboPooledDataSource();
+ c3p0.setDriverClass("oracle.jdbc.driver.OracleDriver");
+ c3p0.setJdbcUrl(url);
+ c3p0.setUser(user);
+ c3p0.setPassword(password);
+
+ druid = new DruidDataSource();
+ druid.setUrl(url);
+ druid.setUsername(user);
+ druid.setPassword(password);
+ druid.setFilters("stat,trace,encoding");
+ druid.setDefaultAutoCommit(false);
+
+ dao_c3p0 = new NutDao(c3p0);
+ dao_druid = new NutDao(druid);
+ if (!dao_c3p0.exists("msg")) {
+ dao_c3p0.execute(Sqls.create("create table msg(message varchar2(5))")); // 字段长度5
+ }
+ }
+
+ @AfterClass
+ public static void destory() {
+ c3p0.close();
+ druid.close();
+ }
+
+ @Before
+ public void before() {
+ // 清空所有数据
+ dao_c3p0.clear("msg");
+ }
+
+ @Test
+ public void test_c3p0() {
+ try {
+ // 将两条插入语句包裹在一个事务内执行,第一条可以正常插入,第二条超过字段长度,会抛异常,事务会回滚
+ Trans.exec(new Atom() {
+ @Override
+ public void run() {
+ dao_c3p0.insert("msg", Chain.make("message", "abc"));
+ dao_c3p0.insert("msg", Chain.make("message", "1234567"));
+ }
+ });
+ } catch (Exception e) {
+ }
+ // abc也跟着回滚了
+ Assert.assertNull(dao_c3p0.fetch("msg", Cnd.where("message", "=", "abc")));
+ }
+
+ @Test
+ public void test_druid() {
+ try {
+ Trans.exec(new Atom() {
+ @Override
+ public void run() {
+ dao_druid.insert("msg", Chain.make("message", "abc"));
+ dao_druid.insert("msg", Chain.make("message", "1234567"));
+ }
+ });
+ } catch (Exception e) {
+ e.printStackTrace(); // 把这里的异常打印出来
+ }
+ // abc插了进去,没有回滚
+ Assert.assertNotNull(dao_druid.fetch("msg", Cnd.where("message", "=", "abc")));
+ }
+
+}
diff --git a/src/test/java/com/alibaba/druid/bvt/util/OracleMockConnection.java b/src/test/java/com/alibaba/druid/bvt/util/OracleMockConnection.java
index 99766e658d..ea3681edfe 100644
--- a/src/test/java/com/alibaba/druid/bvt/util/OracleMockConnection.java
+++ b/src/test/java/com/alibaba/druid/bvt/util/OracleMockConnection.java
@@ -11,17 +11,11 @@ import java.sql.SQLException;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.Calendar;
-import java.util.EnumSet;
import java.util.Properties;
import java.util.TimeZone;
import oracle.jdbc.OracleOCIFailover;
import oracle.jdbc.OracleSavepoint;
-import oracle.jdbc.aq.AQDequeueOptions;
-import oracle.jdbc.aq.AQEnqueueOptions;
-import oracle.jdbc.aq.AQMessage;
-import oracle.jdbc.aq.AQNotificationRegistration;
-import oracle.jdbc.dcn.DatabaseChangeRegistration;
import oracle.jdbc.internal.OracleConnection;
import oracle.jdbc.pool.OracleConnectionCacheCallback;
import oracle.sql.ARRAY;
@@ -50,872 +44,672 @@ public class OracleMockConnection extends MockConnection implements oracle.jdbc.
public OracleMockConnection(MockDriver driver, String url, Properties connectProperties){
super(driver, url, connectProperties);
-
+
String val = (String) connectProperties.get("defaultRowPrefetch");
if (val != null) {
defaultRowPrefetch = Integer.parseInt(val);
}
}
- @Override
public Connection _getPC() {
// TODO Auto-generated method stub
return null;
}
- @Override
public void abort() throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void applyConnectionAttributes(Properties arg0) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void archive(int arg0, int arg1, String arg2) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void cancel() throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void clearAllApplicationContext(String arg0) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void close(Properties arg0) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void close(int arg0) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
- public void commit(EnumSet arg0) throws SQLException {
- // TODO Auto-generated method stub
-
- }
-
- @Override
public ARRAY createARRAY(String arg0, Object arg1) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public BINARY_DOUBLE createBINARY_DOUBLE(double arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public BINARY_FLOAT createBINARY_FLOAT(float arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public DATE createDATE(Date arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public DATE createDATE(Time arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public DATE createDATE(Timestamp arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public DATE createDATE(String arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public DATE createDATE(Date arg0, Calendar arg1) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public DATE createDATE(Time arg0, Calendar arg1) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public DATE createDATE(Timestamp arg0, Calendar arg1) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public INTERVALDS createINTERVALDS(String arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public INTERVALYM createINTERVALYM(String arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public NUMBER createNUMBER(boolean arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public NUMBER createNUMBER(byte arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public NUMBER createNUMBER(short arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public NUMBER createNUMBER(int arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public NUMBER createNUMBER(long arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public NUMBER createNUMBER(float arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public NUMBER createNUMBER(double arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public NUMBER createNUMBER(BigDecimal arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public NUMBER createNUMBER(BigInteger arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public NUMBER createNUMBER(String arg0, int arg1) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public Array createOracleArray(String arg0, Object arg1) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public TIMESTAMP createTIMESTAMP(Date arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public TIMESTAMP createTIMESTAMP(DATE arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public TIMESTAMP createTIMESTAMP(Time arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public TIMESTAMP createTIMESTAMP(Timestamp arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public TIMESTAMP createTIMESTAMP(String arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public TIMESTAMPLTZ createTIMESTAMPLTZ(Date arg0, Calendar arg1) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public TIMESTAMPLTZ createTIMESTAMPLTZ(Time arg0, Calendar arg1) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public TIMESTAMPLTZ createTIMESTAMPLTZ(Timestamp arg0, Calendar arg1) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public TIMESTAMPLTZ createTIMESTAMPLTZ(String arg0, Calendar arg1) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public TIMESTAMPLTZ createTIMESTAMPLTZ(DATE arg0, Calendar arg1) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public TIMESTAMPTZ createTIMESTAMPTZ(Date arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public TIMESTAMPTZ createTIMESTAMPTZ(Time arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public TIMESTAMPTZ createTIMESTAMPTZ(Timestamp arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public TIMESTAMPTZ createTIMESTAMPTZ(String arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public TIMESTAMPTZ createTIMESTAMPTZ(DATE arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public TIMESTAMPTZ createTIMESTAMPTZ(Date arg0, Calendar arg1) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public TIMESTAMPTZ createTIMESTAMPTZ(Time arg0, Calendar arg1) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public TIMESTAMPTZ createTIMESTAMPTZ(Timestamp arg0, Calendar arg1) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public TIMESTAMPTZ createTIMESTAMPTZ(String arg0, Calendar arg1) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
- public AQMessage dequeue(String arg0, AQDequeueOptions arg1, byte[] arg2) throws SQLException {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public AQMessage dequeue(String arg0, AQDequeueOptions arg1, String arg2) throws SQLException {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public void enqueue(String arg0, AQEnqueueOptions arg1, AQMessage arg2) throws SQLException {
- // TODO Auto-generated method stub
-
- }
-
- @Override
public TypeDescriptor[] getAllTypeDescriptorsInCurrentSchema() throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public String getAuthenticationAdaptorName() throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public boolean getAutoClose() throws SQLException {
// TODO Auto-generated method stub
return false;
}
- @Override
public CallableStatement getCallWithKey(String arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public Properties getConnectionAttributes() throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public int getConnectionReleasePriority() throws SQLException {
// TODO Auto-generated method stub
return 0;
}
- @Override
public boolean getCreateStatementAsRefCursor() {
// TODO Auto-generated method stub
return false;
}
- @Override
public String getCurrentSchema() throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public String getDataIntegrityAlgorithmName() throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
- public DatabaseChangeRegistration getDatabaseChangeRegistration(int arg0) throws SQLException {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
public int getDefaultExecuteBatch() {
// TODO Auto-generated method stub
return 0;
}
- @Override
public int getDefaultRowPrefetch() {
return defaultRowPrefetch;
}
- @Override
public TimeZone getDefaultTimeZone() throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public Object getDescriptor(String arg0) {
// TODO Auto-generated method stub
return null;
}
- @Override
public String getEncryptionAlgorithmName() throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public short getEndToEndECIDSequenceNumber() throws SQLException {
// TODO Auto-generated method stub
return 0;
}
- @Override
public String[] getEndToEndMetrics() throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public boolean getExplicitCachingEnabled() throws SQLException {
// TODO Auto-generated method stub
return false;
}
- @Override
public boolean getImplicitCachingEnabled() throws SQLException {
// TODO Auto-generated method stub
return false;
}
- @Override
public boolean getIncludeSynonyms() {
// TODO Auto-generated method stub
return false;
}
- @Override
public Object getJavaObject(String arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public Properties getProperties() {
// TODO Auto-generated method stub
return null;
}
- @Override
public boolean getRemarksReporting() {
// TODO Auto-generated method stub
return false;
}
- @Override
public boolean getRestrictGetTables() {
// TODO Auto-generated method stub
return false;
}
- @Override
public String getSQLType(Object arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public String getSessionTimeZone() {
// TODO Auto-generated method stub
return null;
}
- @Override
public String getSessionTimeZoneOffset() throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public int getStatementCacheSize() throws SQLException {
// TODO Auto-generated method stub
return 0;
}
- @Override
public PreparedStatement getStatementWithKey(String arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public int getStmtCacheSize() {
// TODO Auto-generated method stub
return 0;
}
- @Override
public short getStructAttrCsId() throws SQLException {
// TODO Auto-generated method stub
return 0;
}
- @Override
public TypeDescriptor[] getTypeDescriptorsFromList(String[][] arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public TypeDescriptor[] getTypeDescriptorsFromListInCurrentSchema(String[] arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public Properties getUnMatchedConnectionAttributes() throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public String getUserName() throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public boolean getUsingXAFlag() {
// TODO Auto-generated method stub
return false;
}
- @Override
public boolean getXAErrorFlag() {
// TODO Auto-generated method stub
return false;
}
- @Override
public boolean isLogicalConnection() {
// TODO Auto-generated method stub
return false;
}
- @Override
public boolean isProxySession() {
// TODO Auto-generated method stub
return false;
}
- @Override
public boolean isUsable() {
// TODO Auto-generated method stub
return false;
}
- @Override
public void openProxySession(int arg0, Properties arg1) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void oracleReleaseSavepoint(OracleSavepoint arg0) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void oracleRollback(OracleSavepoint arg0) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public OracleSavepoint oracleSetSavepoint() throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public OracleSavepoint oracleSetSavepoint(String arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public OracleConnection physicalConnectionWithin() {
// TODO Auto-generated method stub
return null;
}
- @Override
public int pingDatabase() throws SQLException {
// TODO Auto-generated method stub
return 0;
}
- @Override
public int pingDatabase(int arg0) throws SQLException {
// TODO Auto-generated method stub
return 0;
}
- @Override
public CallableStatement prepareCallWithKey(String arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public PreparedStatement prepareStatementWithKey(String arg0) throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public void purgeExplicitCache() throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void purgeImplicitCache() throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void putDescriptor(String arg0, Object arg1) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
- public AQNotificationRegistration[] registerAQNotification(String[] arg0, Properties[] arg1, Properties arg2)
- throws SQLException {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
public void registerConnectionCacheCallback(OracleConnectionCacheCallback arg0, Object arg1, int arg2)
throws SQLException {
// TODO Auto-generated method stub
}
- @Override
- public DatabaseChangeRegistration registerDatabaseChangeNotification(Properties arg0) throws SQLException {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
public void registerSQLType(String arg0, Class arg1) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void registerSQLType(String arg0, String arg1) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void registerTAFCallback(OracleOCIFailover arg0, Object arg1) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void setApplicationContext(String arg0, String arg1, String arg2) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void setAutoClose(boolean arg0) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void setConnectionReleasePriority(int arg0) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void setCreateStatementAsRefCursor(boolean arg0) {
// TODO Auto-generated method stub
}
- @Override
public void setDefaultExecuteBatch(int arg0) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void setDefaultRowPrefetch(int defaultRowPrefetch) throws SQLException {
this.defaultRowPrefetch = defaultRowPrefetch;
}
- @Override
public void setDefaultTimeZone(TimeZone arg0) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void setEndToEndMetrics(String[] arg0, short arg1) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void setExplicitCachingEnabled(boolean arg0) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void setImplicitCachingEnabled(boolean arg0) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void setIncludeSynonyms(boolean arg0) {
// TODO Auto-generated method stub
}
- @Override
public void setPlsqlWarnings(String arg0) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void setRemarksReporting(boolean arg0) {
// TODO Auto-generated method stub
}
- @Override
public void setRestrictGetTables(boolean arg0) {
// TODO Auto-generated method stub
}
- @Override
public void setSessionTimeZone(String arg0) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void setStatementCacheSize(int arg0) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void setStmtCacheSize(int arg0) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void setStmtCacheSize(int arg0, boolean arg1) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void setUsingXAFlag(boolean arg0) {
// TODO Auto-generated method stub
}
- @Override
public void setWrapper(oracle.jdbc.OracleConnection arg0) {
// TODO Auto-generated method stub
}
- @Override
public void setXAErrorFlag(boolean arg0) {
// TODO Auto-generated method stub
}
- @Override
- public void shutdown(DatabaseShutdownMode arg0) throws SQLException {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void startup(DatabaseStartupMode arg0) throws SQLException {
- // TODO Auto-generated method stub
-
- }
-
- @Override
public void startup(String arg0, int arg1) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
- public void unregisterAQNotification(AQNotificationRegistration arg0) throws SQLException {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void unregisterDatabaseChangeNotification(DatabaseChangeRegistration arg0) throws SQLException {
- // TODO Auto-generated method stub
-
- }
-
- @Override
public void unregisterDatabaseChangeNotification(int arg0) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void unregisterDatabaseChangeNotification(long arg0, String arg1) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void unregisterDatabaseChangeNotification(int arg0, String arg1, int arg2) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public oracle.jdbc.OracleConnection unwrap() {
// TODO Auto-generated method stub
return null;
}
-
- @Override
+
public PreparedStatement prepareStatement(String sql) throws SQLException {
if (isClosed()) {
throw new MockConnectionClosedException();
@@ -923,4 +717,10 @@ public class OracleMockConnection extends MockConnection implements oracle.jdbc.
return new OracleMockPreparedStatement(this, sql);
}
+
+ @Override
+ public void shutdown(int arg0) throws SQLException {
+ // TODO Auto-generated method stub
+
+ }
}
diff --git a/src/test/java/com/alibaba/druid/bvt/util/OracleMockPreparedStatement.java b/src/test/java/com/alibaba/druid/bvt/util/OracleMockPreparedStatement.java
index ea00c169b0..16967eee89 100644
--- a/src/test/java/com/alibaba/druid/bvt/util/OracleMockPreparedStatement.java
+++ b/src/test/java/com/alibaba/druid/bvt/util/OracleMockPreparedStatement.java
@@ -17,7 +17,6 @@ import java.util.Calendar;
import oracle.jdbc.OracleParameterMetaData;
import oracle.jdbc.OracleResultSetCache;
-import oracle.jdbc.dcn.DatabaseChangeRegistration;
import oracle.sql.ARRAY;
import oracle.sql.BFILE;
import oracle.sql.BINARY_DOUBLE;
@@ -83,25 +82,21 @@ public class OracleMockPreparedStatement extends MockPreparedStatement implement
return executeBatch;
}
- @Override
public ResultSet getReturnResultSet() throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public void registerReturnParameter(int arg0, int arg1) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void registerReturnParameter(int arg0, int arg1, int arg2) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void registerReturnParameter(int arg0, int arg1, String arg2) throws SQLException {
// TODO Auto-generated method stub
@@ -257,13 +252,11 @@ public class OracleMockPreparedStatement extends MockPreparedStatement implement
}
- @Override
public void setBytesForBlob(int arg0, byte[] arg1) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void setBytesForBlobAtName(String arg0, byte[] arg1) throws SQLException {
// TODO Auto-generated method stub
@@ -341,12 +334,6 @@ public class OracleMockPreparedStatement extends MockPreparedStatement implement
}
- @Override
- public void setDateAtName(String arg0, Date arg1, Calendar arg2) throws SQLException {
- // TODO Auto-generated method stub
-
- }
-
@Override
public void setDisableStmtCaching(boolean arg0) {
// TODO Auto-generated method stub
@@ -652,19 +639,12 @@ public class OracleMockPreparedStatement extends MockPreparedStatement implement
}
- @Override
- public void setTimeAtName(String arg0, Time arg1, Calendar arg2) throws SQLException {
- // TODO Auto-generated method stub
-
- }
-
@Override
public void setTimestampAtName(String arg0, Timestamp arg1) throws SQLException {
// TODO Auto-generated method stub
}
- @Override
public void setTimestampAtName(String arg0, Timestamp arg1, Calendar arg2) throws SQLException {
// TODO Auto-generated method stub
@@ -736,19 +716,16 @@ public class OracleMockPreparedStatement extends MockPreparedStatement implement
}
- @Override
public int getLobPrefetchSize() {
// TODO Auto-generated method stub
return 0;
}
- @Override
public long getRegisteredQueryId() throws SQLException {
// TODO Auto-generated method stub
return 0;
}
- @Override
public String[] getRegisteredTableNames() throws SQLException {
// TODO Auto-generated method stub
return null;
@@ -765,13 +742,6 @@ public class OracleMockPreparedStatement extends MockPreparedStatement implement
return false;
}
- @Override
- public void setDatabaseChangeRegistration(DatabaseChangeRegistration arg0) throws SQLException {
- // TODO Auto-generated method stub
-
- }
-
- @Override
public void setLobPrefetchSize(int arg0) throws SQLException {
// TODO Auto-generated method stub
@@ -788,7 +758,6 @@ public class OracleMockPreparedStatement extends MockPreparedStatement implement
this.rowPrefetch = rowPrefetch;
}
- @Override
public long getChecksum() throws SQLException {
// TODO Auto-generated method stub
return 0;
@@ -800,12 +769,6 @@ public class OracleMockPreparedStatement extends MockPreparedStatement implement
return false;
}
- @Override
- public SqlKind getSqlKind() throws SQLException {
- // TODO Auto-generated method stub
- return null;
- }
-
@Override
public int getcacheState() {
// TODO Auto-generated method stub
@@ -830,12 +793,6 @@ public class OracleMockPreparedStatement extends MockPreparedStatement implement
}
- @Override
- public void setSnapshotSCN(long arg0) throws SQLException {
- // TODO Auto-generated method stub
-
- }
-
@Override
public void enterExplicitCache() throws SQLException {
// TODO Auto-generated method stub
@@ -872,13 +829,11 @@ public class OracleMockPreparedStatement extends MockPreparedStatement implement
}
- @Override
public String getOriginalSql() throws SQLException {
// TODO Auto-generated method stub
return null;
}
- @Override
public void setCharacterStreamAtName(String arg0, Reader arg1, int arg2) throws SQLException {
// TODO Auto-generated method stub
diff --git a/src/test/java/com/alibaba/druid/pool/benckmark/Oracle_Case4.java b/src/test/java/com/alibaba/druid/pool/benckmark/Oracle_Case4.java
index fe51d1bc8f..444164005b 100644
--- a/src/test/java/com/alibaba/druid/pool/benckmark/Oracle_Case4.java
+++ b/src/test/java/com/alibaba/druid/pool/benckmark/Oracle_Case4.java
@@ -31,7 +31,7 @@ public class Oracle_Case4 extends TestCase {
private String validationQuery = "SELECT 1 FROM DUAL";
private int threadCount = 1;
private int loopCount = 3;
- final int LOOP_COUNT = 1000 * 1000;
+ final int LOOP_COUNT = 1000 * 1;
private boolean testOnBorrow = false;
private boolean preparedStatementCache = true;
private int preparedStatementCacheSize = 50;
@@ -40,10 +40,10 @@ public class Oracle_Case4 extends TestCase {
private String SQL;
protected void setUp() throws Exception {
- // jdbcUrl = "jdbc:oracle:thin:@10.20.149.85:1521:ocnauto";
- // user = "alibaba";
- // password = "ccbuauto";
- // SQL = "SELECT * FROM WP_ORDERS WHERE ID = ?";
+// jdbcUrl = "jdbc:oracle:thin:@10.20.149.85:1521:ocnauto";
+// user = "alibaba";
+// password = "ccbuauto";
+// SQL = "SELECT * FROM WP_ORDERS WHERE ID = ?";
jdbcUrl = "jdbc:oracle:thin:@10.20.149.81:1521:ointest3";
user = "alibaba";
@@ -68,7 +68,7 @@ public class Oracle_Case4 extends TestCase {
dataSource.setValidationQuery(validationQuery);
dataSource.setTestOnBorrow(testOnBorrow);
dataSource.setConnectionProperties(properties);
- dataSource.setUseOracleImplicitCache(false);
+ dataSource.setUseOracleImplicitCache(true);
// printAV_INFO(dataSource);
// printTables(dataSource);
@@ -155,7 +155,7 @@ public class Oracle_Case4 extends TestCase {
int mod = i % 500;
- String sql = SQL; // + " AND ROWNUM <= " + (mod + 1);
+ String sql = SQL + " AND ROWNUM <= " + (mod + 1);
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setInt(1, 61);
ResultSet rs = stmt.executeQuery();