Can someone help me with the below code. It is working fine when i am connecting to Oracle 11g DB but it is failing with the error Exception in thread "main" java.lang.RuntimeException: java.lang.ArrayIndexOutOfBoundsException when i switch to Oracle 19c DB. I am using ojdbc8.jar and Java 8 for running the below code. In 19c database we are using the Technical account to connect to database instead of normal user account, i am not sure if that has something to do with the error as well.
import java.sql.Connection;
import java.sql.Statement;
import java.util.Properties;
import oracle.jdbc.pool.OracleDataSource;
public class OracleDataSourceTest {
final static String DB_URL = "jdbc:oracle:thin:xxxxxxx";
final static String DB_USER = "XXX";
final static String DB_PASSWORD = "XXX";
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
OracleDataSource dataSource = new OracleDataSource();
dataSource.setConnectionCachingEnabled(true);
dataSource.setUser(DB_USER);
dataSource.setPassword(DB_PASSWORD);
dataSource.setURL(DB_URL);
Properties jdbcProperties = new Properties();
jdbcProperties.setProperty("oracle.jdbc.thinLogonCapability", "o3");
dataSource.setConnectionProperties(jdbcProperties);
Properties connectionProperties = new Properties();
connectionProperties.setProperty("MinLimit", "1");
connectionProperties.setProperty("MaxLimit", "50");
connectionProperties.setProperty("ConnectionWaitTimeout", "0");
connectionProperties.setProperty("ValidateConnection", "true");
dataSource.setConnectionCacheProperties(connectionProperties);
Connection conn = dataSource.getConnection();
System.out.println("Connection obtained");
//do some work with the connection.
Statement stmt = conn.createStatement();
System.out.println("Executed Stmt " + stmt.execute("select * from dual"));
//Close the Connection.
conn.close();
}
}
The following is the full stacktrace of the error
Exception in thread "main" java.lang.RuntimeException: java.lang.ArrayIndexOutOfBoundsException
at oracle.security.o3logon.a.a(Unknown Source)
at oracle.security.o3logon.b.g(Unknown Source)
at oracle.security.o3logon.O3LoginClientHelper.getEPasswd(Unknown Source)
at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:1238)
at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:1025)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:743)
at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:793)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:57)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:747)
at oracle.jdbc.pool.OracleDataSource.getPhysicalConnection(OracleDataSource.java:406)
at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:291)
at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:206)
at oracle.jdbc.pool.OracleConnectionPoolDataSource.getPhysicalConnection(OracleConnectionPoolDataSource.java:148)
at oracle.jdbc.pool.OracleConnectionPoolDataSource.getPooledConnection(OracleConnectionPoolDataSource.java:91)
at oracle.jdbc.pool.OracleImplicitConnectionCache.makeCacheConnection(OracleImplicitConnectionCache.java:1610)
at oracle.jdbc.pool.OracleImplicitConnectionCache.makeOneConnection(OracleImplicitConnectionCache.java:517)
at oracle.jdbc.pool.OracleImplicitConnectionCache.getCacheConnection(OracleImplicitConnectionCache.java:477)
at oracle.jdbc.pool.OracleImplicitConnectionCache.getConnection(OracleImplicitConnectionCache.java:363)
at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:513)
at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:202)
at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:184)
at com.ubs.jdbc.connectionpool.test.OracleDataSourceTest.main(OracleDataSourceTest.java:37)
Caused by: java.lang.ArrayIndexOutOfBoundsException
at java.lang.System.arraycopy(Native Method)
... 22 more