getting error when trying to use OracleDataSource to get connection in 19c DB

Viewed 222

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

0 Answers
Related